进程

什么是进程?

cpu分配资源的最小单元,一个进程可以有多个线程,进程间数据默认是不共享的,进程也是有GIL锁

进程的编写

# 方式一
import multiprocessing

lst = []
def func(arg):
    lst.append(arg)
    print(lst)

if __name__ == '__main__': #这句只有在windos系统中需要写,而在linux和mac中是不需要的
    for i in range(10):
        t = multiprocessing.Process(target=func,args=(i,))
        t.start()
# 方式二
class MyProcess(multiprocessing.Process):

    def run(self):
        print('当前进程',multiprocessing.current_process())


def run():
    p1 = MyProcess()
    p1.start()

if __name__ == '__main__':
    run()

共享数据

虽然进程之间本质数据是不共享的,但也可以通过一些方法也能获取到不同进程的数据

multiprocessing.Queue

import multiprocessing

q = multiprocessing.Queue()

def task(arg,q):
    q.put(arg)


def run():
    for i in range(10):
        p = multiprocessing.Process(target=task, args=(i, q,))
        p.start()

    while True:
        v = q.get()
        print(v)
if __name__ == "__main__":
    run()

Manager

import time
import multiprocessing

def task(arg):
    time.sleep(2)
    print(arg)


if __name__ == '__main__':
    m = multiprocessing.Manager()

    process_list = []
    for i in range(10):
        p = multiprocessing.Process(target=task, args=(i,))
        p.start()
        process_list.append(p)
    while True:
        count = 0
        for p in process_list:
            if not p.is_alive():
                count += 1
        if count == len(process_list):
            break

连接其他电脑数据共享

import multiprocessing

def task(arg):
    pass

if __name__ == '__main__':
    while True:
        # 连接上指定的服务器
        # 去机器上获取url
        url = 'adfasdf'
        p = multiprocessing.Process(target=task, args=(url,))
        p.start()

进程锁

详见线程锁:https://www.cnblogs.com/--kai/p/9629264.html

进程池

import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor

def task(arg):
    time.sleep(2)
    print(arg)

if __name__ == '__main__':

    pool = ProcessPoolExecutor(5)
    for i in range(10):
        pool.submit(task,i)
原文地址:https://www.cnblogs.com/--kai/p/9635627.html