并发

作者: mjzxcvbnm | 来源:发表于2017-11-27 00:35 被阅读0次

并发

多线程

import datetime
import threading
import time

class MutiThread(threading.Thread):
    def __init__(self, name, time):
        threading.Thread.__init__(self, name=name)
        self.time_ = time

    def run(self):
        time.sleep(self.time_)

starttime = datetime.datetime.now()

prod1 = MutiThread('producer1', 1)
prod2 = MutiThread('producer2', 2)
prod3 = MutiThread('producer2', 4)

prod1.start()
prod2.start()
prod3.start()
prod1.join()
prod2.join()
prod3.join()
endtime = datetime.datetime.now()
print (endtime - starttime)

异步IO

import asyncio
import datetime

async def do_some_work(x):
    print('Waiting: ', x)

    await asyncio.sleep(x)
    print('after asyncio', x)
    return 'Done after {}s'.format(x)

starttime = datetime.datetime.now()

'''
coroutine1 = do_some_work(1)
coroutine2 = do_some_work(2)
coroutine3 = do_some_work(4)


tasks = [
    asyncio.ensure_future(coroutine1),
    asyncio.ensure_future(coroutine2),
    asyncio.ensure_future(coroutine3)
]
'''

tasks = [do_some_work(x) for x in (1,2,4)]

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

endtime = datetime.datetime.now()
print (endtime - starttime)

多进程

from multiprocessing import Process
import os
import time
import datetime

# 子进程要执行的代码
def run_proc(name, x):
    print('Run child process %s (%s)...' % (name, os.getpid()))
    time.sleep(x)
    print('%s is finish' % x)

if __name__=='__main__':
    starttime = datetime.datetime.now()
    p1 = Process(target=run_proc, args=('test',1))
    p2 = Process(target=run_proc, args=('test', 2))
    p3 = Process(target=run_proc, args=('test', 4))

    p1.start()
    p2.start()
    p3.start()
    p1.join()
    p2.join()
    p3.join()

    endtime = datetime.datetime.now()
    print(endtime - starttime)

相关文章

网友评论

      本文标题:并发

      本文链接:https://www.haomeiwen.com/subject/uixrbxtx.html