繁体   English   中英

多处理中的python泡菜字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM