我从来没有使用过多处理模块。python:理解多处理的简单for循环
有没有一种方法可以将一个循环做成并发子进程。像
for i in xrange(10): list.append(i)
而不是顺序,使其平行?
我尝试使用队列模块
q = Queue.Queue()
for i in xrange(10):
q.put(i)
def addto(q):
new.append(q.get(block=False))
processes = [Process(target=addto, args=(q,))]
for p in processes:
p.start()
for p in processes:
p.join()
它给出了一个很长的错误,即时通讯粘贴它的最后:
C:\WinPython-64bit-2.7.3.3\python-2.7.3.amd64\lib\pickle.pyc in save_global(self, obj, name, pack)
746 raise PicklingError(
747 "Can't pickle %r: it's not found as %s.%s" %
--> 748 (obj, module, name))
749 else:
750 if klass is not obj:
PicklingError: Can't pickle <type 'thread.lock'>: it's not found as thread.lock
我也看到这个很多:
processes = [Process(target=func, args=(q,x)) for i in some iterable]
所以好吧有一个func(q,x)好吧,我有一个map()或者for循环/而进入我的函数func(),那么为什么迭代过程,再一次? 我不想循环使用过程的整个功能,但只是使这些特定的循环并行进程。为什么用args迭代目标函数?我的意思是当我已经q.put它?
如果我做
processes = Process(target=addto, args=(q,)).start()
“我的意思是我什么时候已经q.put?”究竟!你的例子太微不足道了。即使没有'q.put()'循环,也没有足够的工作来证明它在进程之间分配。 –
@BrianCain我知道这很愚蠢,但我可以用线程来理解它们是如何工作的。我想知道过程如何工作。特别是对我来说问题是使循环平行。 – user2290820