Python随心记--进程调用

进程调用
from multiprocessing import Process
import time

def f(name):
    time.sleep(1)
    print('hello',name,time.ctime())

if __name__ == '__main__':
    p_list = []
    for i in range(3):

        p = Process(target=f,args=('alive',))
        p_list.append(p)
        p.start()
    for i in p_list:
        p.join()
    print('end')
from multiprocessing import Process
import time

class MyProcess(Process):

    # def __init__(self):
    #     super(MyProcess,self).__init__()

    def run(self):
        time.sleep(1)
        print('hello',self.name,time.ctime())

if __name__ == '__main__':
    p_list = []
    for i in range(3):
        p = MyProcess()
        p.daemon = True   #守护进程
        p.start()
        p_list.append(p)
    # for i in p_list:
    #     p.join()
    print('end')
from multiprocessing import Process
import time,os

def info(title):
    print('title:',title)
    print('parent process:',os.getppid())
    print('process id:',os.getpid())

def f(name):
    info('function f')
    print('hello',name)

if __name__ == '__main__':
    info('main process line')
    time.sleep(1)
    print('---------------')
    p = Process(target=info,args=('lin',))
    p.start()
    p.join()

#is_alive
from multiprocessing import Process
import time

class MyProcess(Process):

    def __init__(self,num):
        super(MyProcess,self).__init__()
        self.num = num

    def run(self):
        time.sleep(2)
        print(self.pid)
        print(self.is_alive())
        print(self.num)

if __name__ == '__main__':
    p_list = []
    for i in range(10):
        p = MyProcess(i)
        p_list.append(p)
    for i in p_list:
        i.start()
进程通讯
Process([group[,target[,name[,args[,kwargs]]]]])
group:线程组,目前还没实现,库引用中提示必须是None
target:要执行的方法
name:进程名
args/kwargs:传入的参数
实例方法
#is_alive():返回进程是否在进行
#join() 阻塞
#start() 开启
#run() start()调用run方法
#terminate() 终止任务
属性
daemon
......
队列通讯
import multiprocessing
import queue,time

def foo(q):
    time.sleep(1)
    print(q(id))
    q.put(13)
    q.put('achun')

if __name__ == '__main__':
    # q = queue.Queue()
    q = multiprocessing.Queue()
    p = multiprocessing.Process(target=foo,args=(q,))

    p.start()
    p.join()

    print(q.get())
    print(q.get())
    
管道通信
from multiprocessing import Process,Pipe

def f(conn):
    conn.send([112,{'name':'lin'},'hello'])
    respones = conn.recv()
    print('respones',respones)
    conn.close()
    print('q_ID2:',id(conn))

if __name__ == '__main__':
    parent_conn,child_conn = Pipe()   #双向管道

    print('q_ID2:', id(child_conn))
    p = Process(target=f,args=(child_conn,))
    p.start()
    print(parent_conn.recv())
    parent_conn.send('hello,hao are you')
    p.join()
进程通信 资源(数据)共享
from multiprocessing import Process,Manager

def f(d,l,n):
    d[n] = '1'
    d['2'] = 2
    d[0,25] = None
    l.append(n)

if __name__ == '__main__':
    with Manager() as manager:
        d = manager.dict()
        l = manager.list(range(5))
        print('main process:',id(d),id(l))
        p_list = []
        for i in range(10):
            p = Process(target=f,args=(d,l,i))
            p.start()
            p_list.append(p)

        for res in p_list:
            res.join()

        print(d)
        print(l)
进程同步
from multiprocessing import Process,Lock

def f(l,i):
    with l:
        print('hello world %s ' %i)


if __name__ == '__main__':
    lock = Lock()

    for num in range(10):
        Process(target=f,args=(lock,num)).start()
进程池
from multiprocessing import Process,Pool
import time,os


def Foo(i):
    time.sleep(1)
    print(i)
    return i+100

def Bar(arg):
    print(os.getpid())
    print(os.getppid())
    print('logger:',arg)

# Bar(1)
if __name__ == '__main__':
    pool = Pool(5)  # 创建进程池对象(限制为5个)
    for i in range(100):

        # pool.apply(func = Foo,args = (i,))   #同步
        pool.apply_async(func = Foo,args = (i,),callback = Bar)   #异步

    pool.close()
    pool.join()
    print('ending...........')
协程:协作式(协程是非抢占式的程序)----(生成器)(yield(协程))
#优势1没有切换的消耗
# 2没有锁的概念
import time,queue

def consumer(name):
    print('.................')
    while True:
        new_baozi = yield
        print('[%s] is eating baozi %s' %(name,new_baozi))


def product():
    r = con.__next__()
    r = con2.__next__()
    n = 0
    while 1:
        time.sleep(1)
        print('\033[32;1m[product]\033[0m is making %s and %s' %(n,n+1))
        con.send(n)
        con2.send(n+1)
        n += 2

if __name__ == '__main__':
    con = consumer('c1')
    con2 = consumer('c2')
    product()
greenlet 自主切换执行顺序
from greenlet import greenlet

def test1():
    print(12)
    gr2.switch()
    print(34)
    gr2.switch()


def test2():
    print(56)
    gr1.switch()
    print(78)


gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr2.switch()


import gevent,request,time

start = time.time()

def f(url):
    print('GET:%s' %url)
    resp = request.get(url)
    data = resp.text
    print('%d bytes received from %s.' %(len(data),url))

gevent.joinall([
    gevent.spawn(f,'https://www.python.org/'),
    gevent.spawn(f,'https://www.baidu.org/'),
    gevent.spawn(f,'https://www.Yutube.org/'),
])

print('cost time:',time.time()- start)

猜你喜欢

转载自www.cnblogs.com/Essaycode/p/10325243.html