并发
多线程
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)
网友评论