python3之进程

1创建一个进程:

import time
import multiprocessing
import os

def text1():
    while True:
        print("111111111111")
        print(os.getpid(), os.getppid())
        time.sleep(1)

def text2():
  while True:
    print("222222222222")
    print(os.getpid(), os.getppid())
    time.sleep(1)




def main():
    # text1()
    # text2()
    print(os.getpid())   #进程的pid
    p1 = multiprocessing.Process(target=text1, )  #创建进程
    p2 = multiprocessing.Process(target=text2, )
    p1.start()   #执行进程
    p2.start()


if __name__ == "__main__":
    main()

 2 进程与进程之间是不共享数据的,如果想实现进程之间的数据共享;需要Queue队列来实现:

q = multiprocessing.Queue()   创建队列

q.put()   向队列里面存放数据

q.get()  从队列里面获取数据

q.empty()   队列为空

import multiprocessing
import time

nums = [11,22,33,44]
def text1(q):
    nums.append(55)
    print(nums)
    for temp in nums:
        q.put(temp)

    while True:
        print("11111111")
        time.sleep(1)


def text2(q):
    new_nums = []
    while True:
        data = q.get()
        new_nums.append(data)
        if q.empty():
            break
    print(new_nums)
    while True:
        print("222222222")
        time.sleep(1)



def main():
    q = multiprocessing.Queue()   #创建队列
    """
    一个进程向Queue中写入数据,另外一个进程从Queue中获取数据,
    通过Queue完成了 多个需要配合的进程间的数据共享,从而能够 起到 解耦的作用
    """
    p1 = multiprocessing.Process(target=text1,args=(q, ))  #传递参数
    p2 = multiprocessing.Process(target=text2,args=(q, ))

    p1.start()
    p2.start()


if __name__ == "__main__":
    main()

 3进程池:

import multiprocessing
import time, os, random


def text(i):
    time_start = time.time()
    print("开始时间:%d" % time_start)
    print("%d 的进程:%d" %(i,os.getpid()))
    time.sleep(random.random()*2)
    time_end = time.time()
    print("执行耗时:%s" %(time_end - time_start))


def main():
    po = multiprocessing.Pool(3)   #定义一个进程池,最大进程数为3
    for i in range(0,10):
        po.apply_async(text,(i,))  #向进程池中添加进程

    po.close()    #关闭进程池,
    po.join()    

if __name__ == "__main__":
    main()

猜你喜欢

转载自www.cnblogs.com/yan-peng/p/9971989.html