使用decorators的非阻塞python方法
multitasking的Python项目详细描述
多任务:使用decorators的非阻塞python方法
multitasking是一个很小的python库,允许您将python方法转换为异步方法, 只需使用decorator即可实现非阻塞方法。
示例
# example.pyimportmultitaskingimporttimeimportrandomimportsignal# kill all tasks on ctrl-csignal.signal(signal.SIGINT,multitasking.killall)# or, wait for task to finish on ctrl-c:# signal.signal(signal.SIGINT, multitasking.wait_for_tasks)@multitasking.task# <== this is all it takes :-)defhello(count):sleep=random.randint(1,10)/2print("Hello %s (sleeping for %ss)"%(count,sleep))time.sleep(sleep)print("Goodbye %s (after for %ss)"%(count,sleep))if__name__=="__main__":foriinrange(0,10):hello(i+1)
输出如下:
$ python example.py Hello 1(sleeping for0.5s) Hello 2(sleeping for1.0s) Hello 3(sleeping for5.0s) Hello 4(sleeping for0.5s) Hello 5(sleeping for2.5s) Hello 6(sleeping for3.0s) Hello 7(sleeping for0.5s) Hello 8(sleeping for4.0s) Hello 9(sleeping for3.0s) Hello 10(sleeping for1.0s) Goodbye 1(after for0.5s) Goodbye 4(after for0.5s) Goodbye 7(after for0.5s) Goodbye 2(after for1.0s) Goodbye 10(after for1.0s) Goodbye 5(after for2.5s) Goodbye 6(after for3.0s) Goodbye 9(after for3.0s) Goodbye 8(after for4.0s) Goodbye 3(after for5.0s)
设置
默认最大线程等于CPU内核的μ。 这只是个经验法则!该Thread模块实际上一次不使用多个核心。
可以使用:
更改默认的最大线程数importmultitaskingmultitasking.set_max_threads(10)
……或者,如果你想根据CPU核的数量来设置最大线程数,你可以:
importmultitaskingmultitasking.set_max_threads(multitasking.config["CPU_CORES"]*5)
对于不需要访问共享资源的应用程序, 您可以将MultiTasking设置为使用multiprocessing.Process() 而不是threading.Thread(),因此避免了 GIL constraints。
importmultitaskingmultitasking.set_engine("process")# "process" or "thread"
安装
使用pip:
安装多任务$ pip install multitasking --upgrade --no-cache-dir
法律事务
多任务是在gnu lesser通用公共许可v3.0下分发的。有关详细信息,请参见发行版中的LICENSE.txt文件。 多任务处理不是交互式代理的产品,也不隶属于交互式代理。