2014-11-13 2 views
0

Я видел много примеров по этой теме, но я не могу найти подходящий ответ для меня. Мне нужна ваша помощь, чтобы узнать об этом. Предположим, у меня есть две функции funA() и funB(). Они принимают точно такие же аргументы. И функции возвращают два отдельных выхода, т.е. объект серии панд. Я хочу выполнять функции одновременно без GIL. Вот мой пример кода:Выполнять две разные функции одновременно в python 3.4.1

from multiprocessing import Process 
from queue import Queue 
q1 = Queue() 
q2 = Queue() 
res1 = Process(target=funA,args=(a,b,c,q1)) 
res1.start() 
res2 = Process(target=funB,args=(a,b,c,q2)) 
res2.start() 
res1.join() 
res2.join() 
result1 = q1.get() 
result2 = q2.get() 

Вышеуказанный код дает следующее отслеживающий:

File "C:\Python34\lib\multiprocessing\reduction.py", line 59, in dump 
ForkingPickler(file, protocol).dump(obj) 
_pickle.PicklingError: Can't pickle <class '_thread.lock'>: attribute lookup lock on _thread failed 

Я прошел через следующие резьб как http://sebastianraschka.com/Articles/2014_multiprocessing_intro.html, Concurrently run two functions that take parameters and return lists?, Make 2 functions run at the same time

Пожалуйста, помогите мне , Заранее благодарю.

ответ

0

multiprocessing.Queue Использование вместо queue.Queue: https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Queue

+0

его дает ошибку: '_pickle.PicklingError: Не может Рассол < 'модуль' класса>: модуль подстановки атрибутов на встроенных командах failed' @John –

+0

@sayak_SIBIA: пожалуйста, напишите полная запущенная программа, потому что я скопировал ваш код и добавил необходимые фрагменты, и он работал для меня как на Python 2, так и на Python 3. –