Форум сайта python.su
0
Добрый день!
Имею две функции.
Требуется выполнять каждую из них циклически.
Как это можно реализовать такое через multiprocessing Process?
Если в функциях создаю while, то запуская каждую как самостоятельный процесс получаю выполнение кода в каждой из функций один раз.
Офлайн
61
Сектор приз на барабане! Внесите черный йасчик !!
(код в студию пожалуйста)
Офлайн
0
Код вот такой простенький создал (не понимаю пока - может не правильный) -
from multiprocessing import Process import os def W(y): while(True): y = y + 100 config.X_1 = os.getpid() print(('process id:', os.getpid())) print(config.X_1) time.sleep(1) print(time.time()) return y*y def f(x): while(True): x = x + 100 config.X_2 = os.getpid() print(('process id:', os.getpid())) print(config.X_2) time.sleep(1) print(time.time()) return x*x if __name__ == '__main__': p = Process(target=f, args=(10,)) print(p) p.start() p.join() print(p, p.is_alive()) p = Process(target=W, args=(20,)) print(p) p.start() p.join() print(p, p.is_alive())
Офлайн
61
Да все у вас правильно
# -*- coding: utf-8 -*- from multiprocessing import Process import os import time def W(y): while(True): y = y + 1 config1 = os.getpid() print(('process id:', os.getpid())) print(config1) time.sleep(1) print(time.ctime()) print(y * y) def f(x): while(True): x = x + 2 config2 = os.getpid() time.sleep(1) print(time.ctime()) print(x * x) if __name__ == '__main__': p1 = Process(target=f, args=(10,)) p2 = Process(target=W, args=(20,)) # print(p1) p1.start() p2.start()
Офлайн
0
Но код функций выполняется только один раз, а не в циклически.
Убрал while в функциях.
Добавил run() в процессах и заработало выполнение функций в цикле, причем id стал одинаковый у обоих функций!
Наверное я на правильном пути?
from multiprocessing import Process import os def W(y): #while(True): y = y + 100 time.sleep(1) print(('W process id:', os.getpid(), time.time())) return y*y def f(x): #while(True): x = x + 100 time.sleep(1) print(('f process id:', os.getpid(), time.time())) return x*x if __name__ == '__main__': p1 = Process(target=f, args=(10,)) print(p1) p2 = Process(target=W, args=(20,)) print(p2) p1.start() p2.start() while(True): p1.run() p2.run()
Офлайн
61
С чего вы решили что один раз?
Вот вывод с того кода что я выложил
('process id:', 33313) 33313 Fri Aug 26 14:52:10 2016 441 ('process id:', 33313) 33313 Fri Aug 26 14:52:10 2016 144 Fri Aug 26 14:52:11 2016 196 Fri Aug 26 14:52:11 2016 484 ('process id:', 33313) 33313 Fri Aug 26 14:52:12 2016 529 Fri Aug 26 14:52:12 2016 ('process id:', 33313) 33313 256 Fri Aug 26 14:52:13 2016 576 Fri Aug 26 14:52:13 2016 ('process id:', 33313) 33313 324 Fri Aug 26 14:52:14 2016 625 Fri Aug 26 14:52:14 2016 ('process id:', 33313) 33313 400 Fri Aug 26 14:52:15 2016 676 Fri Aug 26 14:52:15 2016 ('process id:', 33313) 33313 484 Fri Aug 26 14:52:16 2016 Fri Aug 26 14:52:16 2016 729 576 ('process id:', 33313) 33313 Fri Aug 26 14:52:17 2016 Fri Aug 26 14:52:17 2016 676 784 ('process id:', 33313) 33313 [Cancelled]
Отредактировано ZerG (Авг. 26, 2016 14:53:34)
Офлайн
0
Странно, ввел Ваш код, Running выполняется.
А вывод пустой.
Похоже у меня NINJA-IDE не успевает с выводом данных.
Или что то другое не дает?
В других скриптах вывод работает нормально.
Офлайн
0
Подождал выполнение минут пять - увидел небольшой кусок выполнения.
И снова пусто.
Офлайн