首页 > 系统相关 >多进程

多进程

时间:2022-11-20 17:45:48浏览次数:27  
标签:__ queue 线程 进程 data multiprocessing

  • 进程和程序

进程:正在执行的程序

程序:还没有执行的代码,处于静态

一、进程的状态

使用进程实现多任务

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

 

二、进程和线程之间的对比

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

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

(一)根本区别

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

(二)内存分配

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

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

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):

    list1 =[1,2,3,4,5,6,7,8,9,0]
    for li in list1:
        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()
    
-----------------------------------------
数据添加完成!
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

四、进程池

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

  • 进程池实例
from concurrent.futures import ProcessPoolExecutor
import requests
import json
class Vegtable_Data(object):
    def __init__(self):
        self.url = "http://www.xinfadi.com.cn/getPriceData.html"
        self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52"}

    def parse_data(self,num):
        data = {
            "limit": "20",
            "current": num,
            "pubDateStartTime": "",
            "pubDateEndTime": "",
            "prodPcatid": "",
            "prodCatid": "",
            "prodName": ""
        }
        resp = requests.post(self.url,data=data,headers=self.headers)
        dict_data = json.loads(resp.text)["list"]
        for data in dict_data:
            prodCat = data["prodCat"]
            prodName = data["prodName"]
            lowPrice = data["lowPrice"]
            avgPrice = data["avgPrice"]
            highPrice = data["highPrice"]
            place = data["place"]
            unitInfo = data["unitInfo"]
            print(prodCat,prodName,lowPrice,avgPrice,highPrice,place,unitInfo)
if __name__ == '__main__':
    spider=Vegtable_Data()
    with ProcessPoolExecutor(10) as pe:
        for num in range(1,21):
            pe.submit(spider.parse_data,num)

 

标签:__,queue,线程,进程,data,multiprocessing
From: https://www.cnblogs.com/LoLong/p/16909037.html

相关文章

  • python进程
    今日内容概要同步与异步阻塞与非阻塞创建进程的多种方式进程join方法进程间数据隔离进程间通信之IPC机制进程对象诸多方法生产者消费者模型互斥锁今日内容......
  • mongodb后台守护进程启动
    Mongodb可以通过命令行方式和配置文件的方式来启动,具体命令如下:命令行: Shell代码1.[root@localhostmongodb]#./bin/mongod--dbpath=/data/db配置文件:Shell代码1.[......
  • 配置云服务器(Ubuntu)的vnc守护进程(服务)
    tags:UbuntuServer写在前面之前配置过了基于Ubuntu的阿里云服务器,并且通过vnc远程查看UI界面,但是美中不足的一点就是每次开启ssh会话都要重新输入​​vncserver-kill......
  • linux进程回收
    1为什么要进行进程资源的回收当一个进程退出之后,进程能够回收自己的用户区的资源,但是不能回收内核空间的PCB资源,必须由它的父进程调用wait或者waitpid函数完成对子进程的回......
  • java——多线程——进程的理解
    进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程......
  • unix网络编程2.2——高并发服务器(二)多进程与多线程实现
    目录前置文章unix网络编程1.1——TCP协议详解(一):https://www.cnblogs.com/kongweisi/p/16882787.htmlunix网络编程2.1——高并发服务器(一)基础——io与文件描述符、socket编......
  • 进程间通信
    ---pipe管道概念:在内存中开辟管道空间,生产一个管道对象,多个进程使用同一个管道'''管道通信multiprocessing中管道通信只能用于有亲缘关系进程中,即父子进程,兄弟进程2.......
  • 多进程- 进程join方法 - IPC机制 - 多种方法
    目录同步与异步阻塞与非阻塞综合使用创建进程的多种方式进程间数据隔离进程join方法IPC机制生产者消费者模型进程对象的多种方法僵尸进程与孤儿进程守护进程同步与异步用......
  • ZABBIX开发自定义进程关键字监控
    脚本内容:#!/bin/sh####################################################Usedtomonitorthenumberofprocesskeywords#scriptbyshell#writedbyDeliver#20......
  • 同步与异步 multiprocessing 进程对象多种方法
    目录同步与异步阻塞与非阻塞综合使用创建进程的多种方式前言windows系统创建进程的问题(重要)multiprocessing模块之Process展现异步创建进程的方式(一):使用Process()创建进程......