Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 14, 2014 02:20:56

Galvanize
От:
Зарегистрирован: 2011-01-14
Сообщения: 67
Репутация: +  0  -
Профиль   Отправить e-mail  

[РЕШЕНО] multiprocessing Queue бредит

Всем привет.
Имеется скрипт, с мультипроцессингом и очередями. Проблема довольно таки странная. Вчера код работал. После перезагрузки компьютера перестал. Начал копать в чем трабл, и выяснилось вот что.
Имеется участок вида:

from multiprocessing import Process, Queue
q_data = Queue()
def Worker():
    while not q_data.empty():
        #some code
        print q_data.get()
if __name__ == '__main__':
    for i in xrange(5):
        q_data.put(i)
    procs = []
    for i in xrange(5):
        p = Process(target=Worker)
        p.start
        procs.append(p)
   for p in procs:
       p.join()

Код должен напечать 1,2,3,4,5, по каждой циферке из процесса, но в Woker условие while не проходит, т.к. мне выдает, что очереди пустые. Даже с запуском одного процесса такая же шляпа. И самое интересное, что в “main” очередь не пуста.
В чем может быть проблема?



Отредактировано Galvanize (Апрель 14, 2014 15:29:53)

Офлайн

#2 Апрель 14, 2014 05:30:42

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

[РЕШЕНО] multiprocessing Queue бредит

Galvanize
т.к. мне выдает, что очереди пустые
И это не удивительно. В каждом запущенном процессе Ваша очередь переопределяется. Чтобы процессы работали с одной очередью, ее нужно передавать как параметр.
def worker(queue):
    ...
def main():
    queue = Queue()
    ...
    for i in range(5):
        p = Process(target=worker, args=(queue,))
        p.start()
        ...



Офлайн

#3 Апрель 14, 2014 14:38:44

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

[РЕШЕНО] multiprocessing Queue бредит

Может кому полезным будет: https://medium.com/p/40e9b2b36148



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version