学习python的第六天

想哭 专栏收录该内容
1 篇文章 0 订阅

一、知识点

进程:
(1)关于multiprocessing

import multiprocessing
import os
def info(title):

    print(title)
    print(__name__)
    print('father', os.getppid())
    print('self', os.getpid())
    print('--------')
    
 if __name__ == "__main__":
	 # info('hello')
	# 创建一个子进程调用函数
	P = multiprocessing.Process(target=info,args=('hello python',))
	P.start()
	P.join() # 和多线程一样,也是等待的意思
	print('hello word') # 若没有join则会独立运行



(2)关于join

import multiprocessing

import os

import time

def info(title):

    print(title)
    time.sleep(2)
    print(__name__)
    print('father', os.getppid())
    print('self', os.getpid())
    print('--------')

if __name__ == "__main__":
	p1 = multiprocessing.Process(target=info,args=('A1',))
	p2 = multiprocessing.Process(target=info, args=('A2',))
	p3 = multiprocessing.Process(target=info, args=('A3',))
	p1.start()
	p2.start()
	p3.start()
	p1.join()
	p2.join()
	p3.join()
	# 这里的join只是为了卡住主进程,使得三个进程都执行完毕再执行print
	# 这里很重要,以后多进程扫描文件需要完全等待几个进程全部执行完毕在汇总
	print('all over')
	'''
	轮流执行
	p1.start()
	p1.join()
	p2.start()
	p2.join()
	p3.start()
	p3.join()
		

(3)关于Rlock

def A(lock,i):
    with lock:
        print(i)

if __name__ == "__main__":
    lock = multiprocessing.RLock()
    process_list = []
    for i in range(10):
        p = multiprocessing.Process(trget=A,args=(lock,i))
        p.start()
        process_list.append(p)

    for p in process_list:
        p.join()

(4)关于管道

import  multiprocessing

def A(conn):
    conn.send(['a','b','c','d','e']) #发送的数据
    print('A',conn.recv())  #收到的数据
    conn.close() #关闭




if __name__ == "__main__":
    conn_a,conn_b = multiprocessing.pipe()

    p = multiprocessing.Process(target=A,args=(conn_a))

    p.start()

    conn_b.send([1,2,3,4,5,6,7]) #发送数据给conn_a

    print('main',conn_b.recv) 

(5)关于queue

import multiprocessing
import time


def  PUT(q):
    for i in range(10):
        time.sleep(1)
        q.put(100)


def GET(q):
    while 1:
        try:
            print('GET',q.get(timeout = 5))
        except:
            print('队列中已经无法获取元素在5之内')
            break

(6)进程字典列表共享

import multiprocessing

def func(mydict, mylist):

    mydict["lulu"] = "牛皮"
    mydict["lalal"] = "大美女"
    mylist.append(11)
    mylist.append(22)
    mylist.append(33)

if ___name__ == "__main__":
	# with multiprocessing.Manager() as MG:
	#     mydict=MG.dict()
	#     mylist=MG.list(range(5))
	mydict = multiprocessing.Manager().dict()
	                                    # [0,1,2,3,4]
	mylist = multiprocessing.Manager().list(range(5))
	
	p = multiprocessing.Process(target=func, args=(mydict, mylist))
	p.start()
	p.join()
	
	print(mylist)
	print(mydict)	

(7)进程列表数组共享

import multiprocessing

def func(num):

    num[2] = 9999



if __name__ == '__main__':
	# 不同进程之间实现数组共享
	num = multiprocessing.Array('i', [1, 2, 3, 4, 5, 6])  # i代表int类型
	print(num[:])
	p = multiprocessing.Process(target=func, args=(num,))
	p.start()
	p.join()
	print(num[:])

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值