首页 > 编程语言 >记录一个python多线程的错误写法

记录一个python多线程的错误写法

时间:2023-09-14 10:14:12浏览次数:126  
标签:__ function python process result way 多线程 写法 pool

直接先上错误代码:

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 出现问题

标签:__,function,python,process,result,way,多线程,写法,pool
From: https://www.cnblogs.com/chentiao/p/17701758.html

相关文章

  • VueX写法对比
    原始写法<template><div><h1>当前求和为:{{sum}}</h1><selectv-model.number="n"><optionvalue="1">1</option><optionvalue="2">2</opti......
  • glob:Python中文件名的匹配
    前言既然在Pathlib库中提到了glob()函数,那么我们就专门用一篇内容讲解文件名的匹配。其实我们有专门的一个文件名匹配库就叫:glob。不过,glob库的API非常小,但是仅仅应用于文件名的匹配绰绰有余。只要是在实际的项目中需要过滤,或者匹配一组文件,都可以使用该库进行操作。通配符星......
  • Python采集知网
    Python爬虫初探selenium+beautifulsoup4+chromedriver安装模块:*importpymssql*pipinstallbs4*pipinstallselenium*pipinstallpd*pipinstallpandas*pipinstallPyQt5安装浏览器驱动:你自己电脑上装了什么浏览器,就下载对应的驱动程序即可,本文使用的是Google,所......
  • notepad运行python代码的步骤
    notepad运行python代码的步骤:1、用notepad++打开python文件。或者新建文件,保存为.py格式。2、在菜单栏上面有一个运行,我们点击运行->运行,或者使用快捷键F5。3、点击运行菜单后会弹出notepad++中的运行窗口,不是系统自带的cmd运行窗口。输入运行程序名的输入框填写内容为:cmd/k......
  • python:可变类型与不可变类型
    python:可变类型与不可变类型一、引用变量与变量在存储的存储形式在python有个id()方法,可以获取某个变量指向的内存地址num1=10#num1实际储存在栈内存中,当调用num1时通过内存地址引用储存在数据区中的10#如果把num1的值赋予num2,两者是什么关系呢num2=num1print(num......
  • Python基于License的项目授权机制
    1需求说明当项目平台被首次部署在服务器上时,系统是没有被授权的。当客户希望将平台部署到某一台特定的服务器进行使用时,需要提供该服务器的MAC地址,以及授权到期时间,请求获取授权码,收到授权码后,就能正常使用迁移平台。授权方收到授权请求时,获得平台安装的目标服务器的MAC地址......
  • Python学习笔记-Python函数进阶
    函数多返回值思考如果一个函数有两个return,程序如何执行?例如:defreturn_num():return1return2result=return_num()print(result)上面代码只执行了第一个return,因为retrun可以退出当前函数,导致return下方的代码不执行。多个返回值如果一个函数要有多个返回值,书写方式示......
  • 第十八章 多线程
    18.1基本概念18.1.1程序和进程的概念程序-数据结构+算法,主要指存放在硬盘上的可执行文件。进程-主要指运行在内存中的可执行文件。目前主流的操作系统都支持多进程,为了让操作系统同时可以执行多个任务,但进程是重量级的,也就是新建一个进程会消耗CPU和内存空间等系统资......
  • python
    Day01计算机基础和环境搭建课程概要计算机基础编程本质Python的介绍Python环境的搭建计算机基础1.1基本概念计算机的组成计算机是由多个硬件组合而成,常见的硬件有CPU,硬盘,内存,网卡,显示器,机箱,电源...注意事项:机械将零件组合到一起,他们是无法进行协作的操作系统......
  • 【计算机视觉开发(一)】: yolov5与python环境安装
    前言:最近正在学习计算机视觉开发这块,打算开通一个专栏记录学习总结以及遇到的问题汇总。本篇是这个系列的第一篇,主要是环境安装以及yolov5的介绍。关于计算机视觉:参考:百度百科-关于计算机视觉)计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和......