多进程开发

文章介绍了Python中使用multiprocessing模块进行多进程开发的方法,包括直接创建Process以及使用进程池Pool。Process用于创建独立运行的任务,而Pool则优化了进程的创建和销毁,提高资源利用率,尤其适合处理大量短生命周期的任务。
摘要由CSDN通过智能技术生成
多进程开发
1. Process创建多进程
import time
import multiprocessing


def worker():
    sum = 0
    for i in range(100000):
        sum += 1

    print(sum)


if __name__ == '__main__':
    start = time.time()
    jobs = []
    for i in range(6):
        p = multiprocessing.Process(target=worker)
        p.start()
        jobs.append(p)
    for p in jobs:
        p.join()

    end = time.time()
    print(end - start)
2. 进程池Pool创建多进程

创建一定数量的进程来处理事件,事件处理完进 程不退出而是继续处理其他事件,直到所有事件全都处理完毕统一销毁。增加进程的重复利用,降低资源消耗。

  1. 进程的创建和销毁过程消耗的资源较多
  2. 当任务量众多,每个任务在很短时间内完成时,需要频繁的创建和销毁进程。此时对计算机压力较大
  3. 进程池技术很好的解决了以上问题。
from multiprocessing import Pool
import os
import time
import random


def worker(msg):
    t_start = time.time()
    print("%s开始执行,进程号为%d" % (msg, os.getpid()))
    # random.random()随机生成0~1之间的浮点数
    time.sleep(random.random() * 2)
    t_stop = time.time()
    print(msg, "执行完毕,耗时%0.2f" % (t_stop - t_start))


if __name__ == "__main__":
    po = Pool(3)  # 定义一个进程池,最大进程数3
    for i in range(0, 8):
        # Pool().apply_async(要调用的目标,(传递给目标的参数元祖,))
        # 每次循环将会用空闲出来的子进程去调用目标
        po.apply_async(worker, (i,))

    print("----start----")
    # 关闭进程池,关闭后po不再接收新的请求
    po.close()
    # 等待po中所有子进程执行完成,必须放在close语句之后
    po.join()
    print("-----end-----")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Windows系统中,多进程开发可以使用Windows API或者第三方库实现。以下是一个简单的多进程示例代码: ```c++ #include <windows.h> #include <iostream> using namespace std; int main() { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); // 创建子进程 if (!CreateProcess(TEXT("child.exe"), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { cerr << "Failed to create process." << endl; return 1; } // 等待子进程结束 WaitForSingleObject(pi.hProcess, INFINITE); // 关闭句柄 CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return 0; } ``` 在这个示例中,我们使用了Windows API中的CreateProcess函数创建了一个子进程,并使用WaitForSingleObject函数等待子进程结束。需要注意的是,在使用CreateProcess函数时需要填写STARTUPINFO和PROCESS_INFORMATION结构体,其中STARTUPINFO结构体用来指定子进程的一些属性,如标准输入输出句柄,PROCESS_INFORMATION结构体用来接收子进程的句柄和线程句柄。 在子进程中,我们可以使用类似的方式创建进程: ```c++ #include <windows.h> #include <iostream> using namespace std; int main() { cout << "Child process is running." << endl; return 0; } ``` 这是一个简单的示例,实际应用中可能需要更加复杂的进程间通信和同步机制。可以使用Windows API中的管道、共享内存等机制实现。同时,也可以使用第三方库如Boost和Qt等来简化多进程开发
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值