Python Pool阻塞的问题

  1. https://ahuigo.github.io/b/py/py-debug-futex#/
### 使用Python `multiprocessing.Pool` 中的 `map` 方法 为了实现函数针对多个输入值的并行执行,可以利用 Python 的 `multiprocessing` 库来创建进程池对象 `Pool`。此库允许通过数据并行的方式分配输入数据到不同进程中去[^1]。 具体来说,`pool.map()` 函数会阻塞主程序直到所有子进程完成工作,并返回结果列表。下面是一个简单的例子展示如何使用 `multiprocessing.Pool` 和其 `map` 方法: ```python from multiprocessing import Pool import os def task(n): """模拟任务""" print(f'Running task {n} ({os.getpid()})') return n * n if __name__ == '__main__': with Pool(processes=4) as p: # 创建一个包含四个工作者进程的池 results = p.map(task, range(8)) print(results) ``` 上述代码定义了一个名为 `task` 的简单函数用于计算平方数,在主模块中创建了拥有四个并发工作的进程池实例 `p` 并调用了它的成员方法 `map` 来对范围内的整数应用该函数。 对于更复杂的场景比如 IP 扫描脚本,则可以通过如下方式构建: ```python import subprocess from multiprocessing import Pool def ping(ip): try: output = subprocess.check_output(['ping', '-c', '1', ip]) return True, ip except Exception: return False, ip def getIpList(subnet): ips = [] for i in range(1, 255): ips.append(f'{subnet}.{i}') return ips TNUM = "4" def ipScan(ip, num): ip_list = getIpList(ip) with Pool(processes=int(num)) as pool: result = pool.map(ping, ip_list) for res, address in result: if res: print(address) ipScan('192.168.0', TNUM) ``` 这段代码展示了怎样设置自定义数量的工作线程来进行网络扫描操作,其中包含了获取 IP 列表以及发送 ICMP 请求的功能[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值