使用decorators的非阻塞python方法

multitasking的Python项目详细描述


多任务:使用decorators的非阻塞python方法

Python versionTravis-CI build statusPyPi versionPyPi statusStar this repoFollow me on twitter

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java搜索文本中的字符串模式   SecurityManager引发异常的java Mockito模拟   java(仅限Netbeans)未找到适合jdbc的驱动程序:mysql://localhost   java计算给定字符串所有前缀的哈希值的子字符串的哈希值   java如何避免每次访问REST认证API以使用实际服务   用于HTML的java Jsoup选择器组合   可以复制或引用的java构造函数   Java中的HashMap。搞砸containsKey返回意外值   java数组平均值计算   java是检查字符串是否包含特定字符的最有效方法   java反序列化对象类已更改   java典型的EJB3/JPA/JSF中的事务范围是什么?   Install4j的java错误代码20   java:compileJava在本地项目()依赖项上的多模块项目上持续失败“错误:包x.y.z不存在”   java有一种生成Suppression的方法。现有代码库中checkstyle的xml文件?