记录一个python多线程的错误写法
直接先上错误代码:
import multiprocessing def first_way(): init = 3 def process_function(item): result = item * init return result data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] pool = multiprocessing.Pool(processes=4) # 创建一个列表来存储每个进程的结果 results = [] for i in data: result = pool.apply_async(process_function, (i,)) results.append(result) pool.close() pool.join() # 打印结果 for result in results: print(result.get()) # 使用get()方法获取进程的结果 if __name__ == "__main__": first_way()
这个代码的问题是:
multiprocessing.Pool
使用 pickle
来序列化和反序列化函数和参数,以便在多个进程之间传递。在这个错误代码中,process_function
函数被定义在 first_way
函数内部,这可能导致 pickle
出现问题,因为它无法序列化局部函数。
要解决这个问题,可以将 process_function
移出 first_way
函数,使其成为一个全局函数。下面是修复后的代码:
import multiprocessing
# 将 process_function 移出 first_way 函数,定义为一个全局函数
def process_function(item):
init = 3
result = item * init
return result
def first_way():
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
pool = multiprocessing.Pool(processes=4)
# 创建一个列表来存储每个进程的结果
results = []
for i in data:
result = pool.apply_async(process_function, (i,))
results.append(result)
pool.close()
pool.join()
# 打印结果
for result in results:
print(result.get()) # 使用get()方法获取进程的结果
if __name__ == "__main__":
first_way()
通过将 process_function
定义为全局函数,可以避免 pickle
出现问题
如果返回多个结果:
import multiprocessing def process_function(item): result1 = item * 2 result2 = item ** 2 return result1, result2 def main(): data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] pool = multiprocessing.Pool(processes=4) # 创建一个列表来存储每个进程的结果 results = [] for i in data: result = pool.apply_async(process_function, (i,)) results.append(result) pool.close() pool.join() # 打印结果 for result in results: result1, result2 = result.get() print(f"Result 1: {result1}, Result 2: {result2}") if __name__ == "__main__": main()
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/17701758.html,如有侵权联系删除
分类:
python语法功能
标签:
多进程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2022-09-14 深度学习图像预处理时BGR2RGB的两种可用方式
2022-09-14 python-OpenCV使用CUDA处理图像