NSF Back-end Dev Engineer

python多任务


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库。


上一篇 git

下一篇 nsf-github

Comments

Content