#python
#python
Вопрос:
Я знаю основное использование многопроцессорной обработки в отношении пулов, и я использую функцию apply_async (), чтобы избежать блокировки, мой проблемный код, такой как:
from multiprocessing import Pool, Queue
import time
q = Queue(maxsize=20)
script = "my_path/my_exec_file"
def initQueue():
...
def test_func(queue):
print 'Coming'
While True:
do_sth
...
if __name__ == '__main__':
initQueue()
pool = Pool(processes=3)
for i in xrange(11,20):
result = pool.apply_async(test_func, (q,))
pool.close()
while True:
if q.empty():
print 'Queue is emty,quit'
break
print 'Main Process Lintening'
time.sleep(2)
Выводимые результаты всегда являются основным процессом, я не могу найти слово «Coming»..
Приведенный выше код не содержит синтаксических ошибок и никаких исключений.
Любой может помочь, спасибо!
Комментарии:
1. Вы когда-нибудь ждали, пока пул выполнит какую-либо работу, или всегда вызывали
pool.close()
сразу?2. При первом запуске он не может работать, сегодня я запускаю снова, он работает. Но есть и другие проблемы: в test_func() то, что он собирается сделать, это выполнить m another .py(скрипт похож на spider и может запускаться без каких-либо проблем). Я вижу только одну строку «Coming» и просто останавливаюсь на ней, чтобы выполнить скрипт. Но я хочу видеть, как работает apply_async (), я имею в виду, что должен быть выведен хотя бы еще один «приход»
3. Основной сценарий, я хочу, чтобы основной процесс отслеживал мою очередь, и если я подставляю while в test_func() для отображения имени моего процесса, я всегда получаю «Основной процесс»