多进程学习入门

一、创建函数并将其作为单个进程

import multiprocessing

import time

def worker(interval):

    n=5

    while n>0:

        print ("The time is {0}".format(time.ctime()))

        time.sleep(interval)

        n=n-1

 

if __name__=="__main__":

    p=multiprocessing.Process(target=worker,args=(1,))

    p.start()

    print ("p.pid:",p.pid)

    print ("p.name:",p.name)

print ("p.is_alive:",p.is_alive())

 

二、创建函数并将其作为多个进程

import multiprocessing

import time

def worker1(interval):

    print ("worker_1")

    time.sleep(interval)

    print ("end worker_1")

 

def worker2(interval):

    print ("worker_2")

    time.sleep(interval)

    print ("end worker_2")

 

def worker3(interval):

    print ("worker_3")

    time.sleep(interval)

    print ("end worker_3")

 

def worker4(interval):

    print ("worker_4")

    time.sleep(interval)

    print ("end worker_4")

 

def worker5(interval):

    print ("worker_5")

    time.sleep(interval)

    print ("end worker_5")

 

 

 

if __name__=="__main__":

    p1=multiprocessing.Process(target=worker1,args=(1,))

    p2=multiprocessing.Process(target=worker2,args=(2,))

    p3=multiprocessing.Process(target=worker3,args=(4,))

 

    p1.start()

    p2.start()

    p3.start()

 

    print ("The number of CPU is:"+str(multiprocessing.cpu_count()))

    for p in multiprocessing.active_children():

        print ("child p.name: "+p.name+"\tp.id: "+str(p.pid))

    print ("end!")

三、将进程定义为类

import multiprocessing

import time

class ClockProcess(multiprocessing.Process):

    def __init__(self,interval):

        multiprocessing.Process.__init__(self)

        self.interval=interval

    def run(self):

        n=5

        while n>0:

            print("The time is {0}".format(time.ctime()))

            time.sleep(self.interval)

            n=n-1

 

if __name__=="__main__":

    p=ClockProcess(3)

    p.start()

 

四、daemon程序对比结果

4.1 不加daemon属性

import multiprocessing

import time

def worker(interval):

    print("work start:{0}".format(time.ctime()))

    time.sleep(interval)

    print ("word end:{0}".format(time.ctime()))

 

if __name__=="__main__":

    p=multiprocessing.Process(target=worker,args=(3,))

    p.start()

    print ("end!")

 

4.2 加上daemon属性

import multiprocessing

import time

def worker(interval):

    print("work start:{0}".format(time.ctime()))

    time.sleep(interval)

    print ("word end:{0}".format(time.ctime()))

 

if __name__=="__main__":

    p=multiprocessing.Process(target=worker,args=(3,))

    p.daemon=True

    p.start()

    print ("end!")

 

4.3 设置daemon执行完结束的方法

import multiprocessing

import time

def worker(interval):

    print("work start:{0}".format(time.ctime()))

    time.sleep(interval)

    print ("word end:{0}".format(time.ctime()))

 

if __name__=="__main__":

    p=multiprocessing.Process(target=worker,args=(3,))

    p.daemon=True

    p.start()

    p.join()

    print ("end!")

 

五、Lock

当多个进程需要访问共享资源的时候,Lock可以用来避免访问的冲突

import multiprocessing

import sys

def worker_with(lock,f):

    with lock:

        fs=open(f,'a+')

        n=10

        while n>1:

            fs.write("Locked acquired via with"+str(n)+"\n")

            n-=1

        fs.close()

 

def worker_no_with(lock,f):

    lock.acquire()

    try:

        fs=open(f,'a+')

        n=10

        while n>1:

            fs.write("Lock acquired directly"+str(n)+"\n")

            n-=1

        fs.close()

    finally:

        lock.release()

 

if __name__=="__main__":

    lock=multiprocessing.Lock()

    f="file.txt"

    w=multiprocessing.Process(target=worker_with,args=(lock,f))

    nw=multiprocessing.Process(target=worker_no_with,args=(lock,f))

    w.start()

    nw.start()

    print ("end!")

 

六、Semaphore

Semaphore 用来控制对共享资源的访问数量,例如池的最大连接数

import multiprocessing

import time

def worker(s,i):

    s.acquire()

    print(multiprocessing.current_process().name+"acquire")

    time.sleep(i)

    print (multiprocessing.current_process().name+"release")

    s.release()

 

if __name__=="__main__":

    s=multiprocessing.Semaphore(2)

    for i in range(5):

        p=multiprocessing.Process(target=worker,args=(s,i*2))

        p.start()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值