[英]python pickle string in multiprocessing
我在 python 中使用多处理很困难,尽管我没有在任何平台上使用过多的多处理,也不清楚队列如何在多进程通信中工作。 (如果有人可以提供简单的参考,那将是很大的帮助)。
问题来了:
from concurrent.futures.process import ProcessPoolExecutor
class Sample:
def __init__(self):
self.bla_exec = ProcessPoolExecutor(max_workers=1)
def blafunc(self,stt):
print('sdasdadadsa::::::::',stt)
def on_ticks(self, ticks):
f=self.bla_exec.submit(self.blafunc,ticks)
print(f.result()) //If I dont do .result(), nothing gets printed
if __name__ == '__main__':
Sample().on_ticks('123')
这给了我错误:
TypeError: cannot pickle 'weakref' object
请注意,我故意执行f.result()
只是为了测试我的样本。
认为它正在做的是尝试腌制 ProcessPoolExecutor 因为您尝试在池中运行的函数是绑定方法。 它绑定到的对象是一个包含对 ProcessPoolExecutor 的引用的 Sample。 如果我将 ProcessPoolExecutor 创建为不在类中的顶级对象,则您的代码运行良好。
Python 序列化(默认为pickles)在进程空间之间来回移动的对象,而不是依赖于两个进程之间可能存在的任何类型的共享内存。 因此,您必须小心您的函数有权访问 Python 必须将哪些内容带入您的函数将运行的其他进程中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.