社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Mike McKerns

Mike McKerns 最近创建的主题
Mike McKerns 最近回复了
11 年前
回复了 Mike McKerns 创建的主题 » 何时在python中使用map()[重复]

如果您计划编写任何异步、并行或分布式代码,您可能会希望 map 对列表的理解——因为大多数异步、并行或分布式包提供了 地图 函数重载python的 地图 . 然后通过适当的 地图 函数到您的代码的其余部分,您可能不需要修改您的原始串行代码,使其并行运行(等)。

9 年前
回复了 Mike McKerns 创建的主题 » python:pathos多处理池调用类外函数

我是 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.

>>>