1.python进程
demo:
import multiprocessing
def func1(x):
for i in range(1000000000):
x = x+1
x = x-1
if __name__ == "__main__":
pool = multiprocessing.Pool(processes=6)
for _ in range(6):
pool.apply_async(func1, (1, ))
pool.close()
pool.join()
pool = multiprocessing.Pool(processes=6)建立进程池,限制进程最大数量,一般不要超过cpu核数,超出后多个进程使用同一核,进程间切换反而让效率降低。pool.apply_async(func1, (1, ))第一个参数是调用的函数名,第二个参数为函数参数。
2.python线程
from threading import Thread
def f(x):
for i in range(x)
print(i)
Thread(target=f, args=[100]).start()
Thread(target=f, args=[100]).start()
3.python进程+协程
import multiprocessing
import time
import gevent
from gevent import monkey
from pykafka import KafkaClient
def f(x):
for i in range(x):
print(i)
def func1(x):
monkey.patch_all() # 给所有的耗时操作打上补丁
gevent.joinall([gevent.spawn(f, x) for _ in range(20)])
start_time = time.time()
pool = multiprocessing.Pool(processes=5)
for _ in range(5):
pool.apply_async(func1, (10000, ))
pool.close()
pool.join()
print(time.time() - start_time)
协程使用gevent库。