首页 > 系统相关 >23.多进程

23.多进程

时间:2022-12-02 22:36:55浏览次数:43  
标签:__ 23 list 进程 import data multiprocessing

多进程

使用进程实现多任务

multiprocessing模块就是跨平台的多进程模块提供了有个Process类来代表一个进程对象,这个对象可以理解为一个独立的进程,可以执行另外的事情

进程和线程之间的对比

进程:能够完成多任务,一台电脑可以开多个浏览器

线程:能够完成多任务,一个微信可以同时和多人聊天

根本区别

进程是操作系统资源分配的基本单位,而线程,则是任务调度和执行的基本单位

内存分配

  • 系统为每个进程分配不同的内存空间;

  • 而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源

image

import threading
import time
import multiprocessing

def demo1():
    while True:
        print("我是demo1")
        time.sleep(1)
def demo2():
    while True:
        print("我是demo2")
        time.sleep(1)

if __name__ == '__main__':
    t1 = threading.Thread(target=demo1)
    t2 = threading.Thread(target=demo2)
    t1.start()
    t2.start()
    # p1 = multiprocessing.Process(target=demo1)
    # p2 = multiprocessing.Process(target=demo2)

    # p1.start()
    # p2.start()

进程之间的通信 --Queue

Queue---先进先出队列

import multiprocessing


def down_load(queue):
    list = [1,2,3,4,5,6,7,8,9,0]
    for li in list:
        queue.put(li)
    print("数据获取完成")


def parse_data(queue):
    list_data = []
    while True:
        data = queue.get()
        list_data.append(data)

        if queue.empty():
            break
    print(list_data)

def main():
    queue = multiprocessing.Queue()
    q1 = multiprocessing.Process(target=down_load,args=(queue,))
    q2 = multiprocessing.Process(target=parse_data,args=(queue,))
    q1.start()
    q2.start()


if __name__ == '__main__':
    main()

进程池

当需要创建的子进程数量不多时,,可以直接利用multiprocessing中的Process,动态生成多个进程,但是如果有上千进程,手动创建工作量巨大,这个时候我们可以创建一个进程池

进程池实战

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
import requests
import json
import csv

f = open("movie.csv", mode="w", encoding="utf-8", newline="")
write = csv.writer(f)


class DouBan(object):
    def __init__(self):
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36"}

    def get_data_index(self, url):
        resp = requests.get(url, headers=self.headers)
        data_list = json.loads(resp.text)
        for data in data_list:
            title = data["title"]
            actors = ",".join(data["actors"])
            types = ",".join(data["types"])
            movie_list = [title, actors, types]
            print(movie_list)
            write.writerow(movie_list)


if __name__ == '__main__':
    spider = DouBan()
    with ThreadPoolExecutor(20) as td:
        for num in range(50):
            url = "https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start={}&limit=20".format(
                num * 20)
            td.submit(spider.get_data_index, url)

标签:__,23,list,进程,import,data,multiprocessing
From: https://www.cnblogs.com/blog4lyh/p/16945828.html

相关文章

  • 2022-2023 20221403《计算机基础与程序设计》第十四周学习总结
    学期(2022-2023-1)学号(20221403)《计算机基础与程序设计》第十四周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个......
  • 2022-2023-1 20221421 《计算机基础与程序设计》第十四周学习总结
    作业信息班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14作业正文:2022-2023-120221312......
  • 2022-2023-1 20221404 《计算机基础与程序设计》第十四周学习总结
    2022-2023-120221404《计算机基础与程序设计》第十四周学习总结作业信息班级链接(2022-2023-1-计算机基础与程序设计)作业要求(2022-2023-1计算机基础与程序设......
  • shell查询进程杀死进程并等待进程退出
    查询并杀死进程stop_service(){ #查询Java进程ID localpid=$(ps-ef|grepjava|grep"${process_keyword}"|grep-vgrep|awk'{print$2}')#如果......
  • 进程异常core文件分析
    1. core文件相关配置1.1 查看core文件是否开启Corefilesize为0代表关闭core文件,unlimited代表开启core文件。开启core文件以后,代表进程异常以后,会生成core文件。使用......
  • cs231n学习笔记——Lecture 4 Backpropagation and Neural Networks
    该博客主要用于个人学习记录,部分内容参考自:【cs231n】详解神经网络中的反向传播、CS231n笔记三:神经网络之反向传播、超详细斯坦福CS231n课程笔记(第四课)——反向传播和神......
  • Linux如何查看当前占用CPU或内存最多的K个进程
    内存可以使用以下命令查使用内存最多的K个进程方法1:ps-aux|sort-k4nr|head-K如果是10个进程,K=10,如果是最高的三个,K=3说明:ps-aux中(a指代a......
  • 12Linux进程管理(重点)
    进程管理基本介绍ps指令processstatus:命令用于显示当前进程的状态,类似于windows的任务管理器。语法ps[options][--help]参数:ps的参数非常多,在此仅列出......
  • Mono后台进程制作
    要解决的问题解决C#开发的控制台在Mono下面后台运行的问题,由于我遇到的问题比较特殊,需要用到第三方的回调,但是在回调过程中出现问题:使用anyexec,发现后台服务可以启动,但是Lo......
  • C多进程
    这篇文章主要是想针对多进程的创建和一些通信手段来进行一下记录创建子进程关于创建子进程的原型一般都是用的这个,直接fork,这个函数在父进程中调用,在父子进程中各有一个......