我是
pathos
. 如果您在非windows系统上执行代码,它可以很好地工作——甚至可以从解释器执行。(同样,它也可以从文件中工作)。
>>> from pathos.multiprocessing import ProcessingPool;
>>> import time
>>> import sys;
>>> import datetime
>>> class tester:
... def __init__(self):
... self.pool=ProcessingPool(2);
... def func(self,msg):
... print (str(datetime.datetime.now()));
... for i in xrange(1):
... print msg
... sys.stdout.flush();
... time.sleep(2)
... def worker(self):
... """"""
... pool=self.pool
... for i in xrange(10):
... msg = "hello %d" %(i)
... pool.map(self.func,[i])
... pool.close()
... pool.join()
... time.sleep(40)
...
>>> datetime.datetime.now()
datetime.datetime(2015, 10, 21, 19, 24, 16, 131225)
>>> t = tester()
>>> t.worker()
2015-10-21 19:24:25.927781
0
2015-10-21 19:24:27.933611
1
2015-10-21 19:24:29.938630
2
2015-10-21 19:24:31.942376
3
2015-10-21 19:24:33.946052
4
2015-10-21 19:24:35.949965
5
2015-10-21 19:24:37.953877
6
2015-10-21 19:24:39.957770
7
2015-10-21 19:24:41.961704
8
2015-10-21 19:24:43.965193
9
>>>
问题是
multiprocessing
从根本上讲,windows是不同的,因为windows没有
fork
因此,它不像具有
叉
.
多处理
有一个叉子腌菜机,在被子下面
subprocess
而非windows系统可以跨进程利用共享内存。
dill
有一个
check
和A
copy
方法,该方法执行
loads(dumps(object))
对一些
object
在哪里
复制
使用共享内存,而
检查
使用
子过程
(与中的Windows相同
多处理
)这里是
检查
Mac上的方法,显然这不是问题所在。
>>> import dill
>>> dill.check(t.func)
<bound method tester.func of <__main__.tester instance at 0x1051c7998>>
你需要在windows上做的另一件事是
freeze_support
开始的时候
__main__
(即第一行
小精灵
)这在非windows系统上是不必要的,但在windows上却是非常必要的。医生来了。
>>> import pathos
>>> print pathos.multiprocessing.freeze_support.__doc__
Check whether this is a fake forked process in a frozen executable.
If so then run code specified by commandline and exit.
>>>