Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Параллельное выполнение циклов в Python 3

#python #python_3x


В програмке есть два цикла while, как сделать так, чтобы они работали одновременно?
    


Ответы

Ответ 1



Используйте модуль threading: from threading import Thread def f(): for i in range(3): print('Я из функции f и я несу ', i) def f_2(): for i in range(3): print('Я из функции f_2 и я несу ', i) th_1, th_2 = Thread(target=f), Thread(target = f_2) if __name__ == '__main__': th_1.start(), th_2.start() th_1.join(), th_2.join() Результат: Я из функции f и я несу 0 Я из функции f_2 и я несу 0 Я из функции f и я несу 1 Я из функции f_2 и я несу 1 Я из функции f и я несу 2 Я из функции f_2 и я несу 2

Ответ 2



from asyncio import coroutine, ensure_future, gather, get_event_loop import time, random def func1(a): while a < 3: print('func1', a) a += 1 time.sleep(random.randrange(3)) return 'func1 = %s' % a def func2(a): while a < 5: print('func2', a) a += 1 time.sleep(random.randrange(3)) return 'func2 = %s' % a @coroutine def async_worker(fn, a): r = yield from LOOP.run_in_executor(None, fn, a) return r @coroutine def async_map(): workers = [ensure_future(async_worker(func1, 0), loop=LOOP), ensure_future(async_worker(func2, 0), loop=LOOP)] result = yield from gather(*workers, loop=LOOP) return result if __name__ == '__main__': LOOP = get_event_loop() result = LOOP.run_until_complete(async_map()) print(result) out: func1 0 func2 0 func2 1 func1 1 func2 2 func1 2 func2 3 func2 4 ['func1 = 3', 'func2 = 5'] -- def func1(): a = 0 while a < 2: a += 1 print('func1', a) yield a def func2(): b = 0 while True: a = yield print('func2', a) b += a yield b if __name__ == '__main__': fn2 = func2() next(fn2) for a in func1(): b = fn2.send(a) print('b = %s' % b) next(fn2) out: func1 1 func2 1 b = 1 func1 2 func2 2 b = 3

Комментариев нет:

Отправить комментарий