Python网编_进程池的回调函数

将n个任务交给n个进程去执行每一个进程在执行完毕之后会有一个返回值,这个返回值交给callback函数指定的那个函数去处理这样的话所有的进程哪一个执行的最后快,哪一个就可以先进性统计工作这样就能在最短的时间内得到我们想要的结果
import time
import random
from multiprocessing import Pool

def get(i):  # 使用i模拟网站地址 在子进程中执行
    time.sleep(random.random())  # 模拟不同的网站返回数据的时间
    print(i,‘从网页上获取一个网页的内容‘)
    return i,‘网页内容‘* i

def  call_back(content):  # 在主进程执行
    print(content)

if __name__ == ‘__main__‘:
    p = Pool(5)
    ret_1 = []
    for i in range(10):
        p.apply_async(get,args=(i,),callback=call_back)
    p.close()
    p.join()
回调函数一般用于爬虫,开启多进程去爬多个网站的内容,哪个先返回就先处理哪个

原文地址:https://www.cnblogs.com/gzying-01/p/10380824.html

时间: 2024-10-31 00:18:23

Python网编_进程池的回调函数的相关文章

W10_Pipe_Manager数据共享_进程池和回调函数

[TOC] #管道 ``` from multiprocessing import Pipe,Process def func(conn2): print(conn2.recv()) conn1,conn2 = Pipe() conn1.send("Hello pipe") p = Process(target=func, args=(conn2,)) p.start() ``` **多进程中管道异常EOFError** ``` from multiprocessing import

Python网编_进程之间的数据隔离

写在前面: 控制台的本质是一个文件 文件操作的时候尽量不要用r+ w+ a+ 如果用要小心文件指针混乱 随着进程数量的增多会有一些隐患 from multiprocessing import Process n = 100 # 定义一个全局变量 def func(): global n # 通过global改变n的值 n -= 1 if __name__ == '__main__': lis = [] for i in range(2): # 开启两个进程 p = Process(target=

Python网编_进程对象的其他方法

直接上代码: from multiprocessing import Process import time class MyProcess(Process): def __init__(self,a,b): super().__init__() self.a = a self.b = b def run(self): print('start') time.sleep(0.1) print(self.a,self.b) if __name__ == '__main__': p = MyProc

Python网编_进程间的数据共享

Manager提供了很多数据共享机制,但是对于一些基础数据类型来说,是数据不安全的,那么Q:如何解决呢? A: 需要我们自己手动加锁 from multiprocessing import Manager,Process,Lock # Process开子进程用,Lock数据加锁用,Manager进程间数据共享用 def work(d,lock): # lock.acquire() # d['count'] -= 1 # lock.release() with lock: # 上下问管理 注意了l

Python 3 进程池与回调函数

Python 3 进程池与回调函数 一.进程池 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.多进程是实现并发的手段之一,需要注意的问题是: 很明显需要并发执行的任务通常要远大于核数 一个操作系统不可能无限开启进程,通常有几个核就开几个进程 进程开启过多,效率反而会下降(开启进程是需要占用系统资源的,而且开启多余核数目的进程也无法做到并行) 例如当被操作对象数目不大时,可以直接利用multiprocessing中的Proces

Python学习【第21篇】:进程池以及回调函数

python并发编程之多进程2-------------数据共享及进程池和回调函数 一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实上Manager的功能远不止于此. ? 1 2 3 4 命令就是一个程序,按回车就会执行(这个只是在windows情况下) tasklist 查看进程 tasklist | findstr  pycharm   #(

进程间的数据共享、进程池的回调函数和线程初识、守护线程

一.进程的数据共享 进程间数据是独立的,可以借助于队列或管道实现通信,二者都是基于消息传递的 虽然进程间数据独立,但可以通过Manager实现数据共享. 把所有实现了数据共享的比较便捷的类都重新又封装了一遍,并且在原有的multiprocessing基础上增加了新的机制 list dict等 数据共享的机制 支持数据类型非常有限 list dict都不是数据安全的,你需要自己加锁来保证数据安全 Manager用法: Manager().dict() # 创建共享的字典 Manager().lis

python全栈开发基础【第二十二篇】进程池和回调函数

一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实上Manager的功能远不止于此. 命令就是一个程序,按回车就会执行(这个只是在windows情况下) tasklist 查看进程 tasklist | findstr pycharm #(findstr是进行过滤的),|就是管道(tasklist执行的内容就放到管道里面了, 管道后面的findst

进程池与回调函数

一.进程池(重点) 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.多进程是实现并发的手段之一,需要注意的问题是: 1.很明显需要并发执行的任务通常要远大于核数 2.一个操作系统不可能无限开启进程,通常有几个核就开几个进程 3.进程开启过多,效率反而会下降(开启进程是需要占用系统资源的,而且开启多余核数目的进程也无法做到并行) 例如当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进