python3.5的多任务库+

pytasking的Python项目详细描述


任务分配

Python3.5+的一个简单库,为多任务处理提供了一个简单的接口。在

目录

依赖关系

  • Python 3.5+

标准库之外没有外部模块依赖项,但是,如果您想利用uvloop,您可以安装它,pytasking库将自动使用它(仅在Linux/MacOS上可用)。

安装

来源

  • 在项目根目录中包含目录pytasking。在
  • 如果在Linux/MacOS上,则运行python -m pip install -r requirements.txt。在

PyPi

  • 运行pip install pytasking。在

使用

一个基本的python示例:

#!/usr/bin/env pythonimportpytaskingimporttimedefhello(hello_queue):whileTrue:hello_queue.put_nowait("Hello World!")pytasking.sleep(1.5,sync=True)asyncdefping():whileTrue:try:print("Ping!")awaitpytasking.sleep(1.0)print("Pong!")exceptpytasking.asyncio.CancelledError:print("Pang!")breakasyncdefmain(task_manager):hellos=0hello_queue=pytasking.multiprocessing.Queue()hello_proc=task_manager.add_proc(hello,hello_queue)whileTrue:try:ifhellos==5:task_manager.delete_proc(hello_proc)ifhello_queue.qsize()>0:try:print(hello_queue.get_nowait())hellos+=1except:passping_task=task_manager.add_task(ping)awaitpytasking.sleep(0.5)task_manager.delete_task(ping_task)exceptpytasking.asyncio.CancelledError:breakif__name__=="__main__":task_manager=pytasking.Manager()task_manager.add_task(main,task_manager)try:task_manager.start()exceptKeyboardInterrupt:passexcept:raise

美国石油学会

class pytasking.Manager()

Manager类的实例为程序提供异步事件循环。目前pytasking在任何给定时间只支持1个异步事件循环。在

异步任务和并行进程由Manager实例派生和管理。在

add_task(task, *args, **kwargs)

从函数定义创建异步任务。像平常一样传递参数和关键字参数。此函数从任务的has返回一个id。您可以使用id来检索和删除任务。请确保使用以下模板定义函数:

^{pr2}$

任务将立即开始,您可以随时添加任务。在

delete_task(t_id)

给定任务id,您可以调用删除任务。此方法调用协程的cancel()方法,如果在pytasking.CancelledError中捕获和处理,它将给协程清理的机会,甚至拒绝请求。在

get_task(t_id)

如果要检索底层协同程序,可以使用此方法并提供任务id来获取它。在

get_tasks()

这将以列表形式返回所有任务ID,您可以将此方法与get_task(t_id)结合使用。在

add_proc(proc, *args, **kwargs)

从函数定义创建并行进程。像平常一样传递参数和关键字参数。此函数从进程的has返回一个id。您可以使用id来检索和删除进程。请注意,默认情况下,进程按顺序运行。尝试使用此模板:

defparallel_process():# Define any arguments or keyword arguments as you normally would.# Do whatever you need to do here as you normally would.# If you want this task to run indefinitely, do this:whileTrue:try:# Do something forever.pytasking.sleep(1.0,sync=True)except:raise

delete_proc(p_id)

给定一个进程id,就可以调用来删除一个进程。此方法调用terminate()join()来尝试干净地关闭进程。在进程访问管道或队列时关闭进程可能会损坏资源。在

get_proc(p_id)

如果要检索底层进程,可以使用此方法并提供进程id来获取它。在

{

这将以列表形式返回所有进程ID,您可以将此方法与get_process(p_id)结合使用。在

start()

这将启动Manager实例并启动所有添加的任务和进程。在

已知问题

递归生成

在某些情况下,您可能无法在任务中生成任务、流程中的流程、流程中的任务或任务中的流程。我需要进一步调查。在

管道/队列损坏

如果决定删除某个进程,请小心,如果该进程正在访问队列或管道,则该队列或管道可能会损坏,并且无法再次使用。在

变更日志

1.2

  • 改变命名约定,朝着1.x约定前进。

打破变化

  • 来自asynciomultiprocessing模块的所有包装异常和数据结构现在都已命名为pytasking。例如,pytasking.CancelledError现在是pytasking.asyncio.CancelledError。这种变化是为了使它更加明确和自然。在

1.1.0

  • 改进文档。在
  • 为Manager类实现了附加的helper方法–有关详细信息,请参阅文档。在

1.0.0

  • 这是pytasking的初始版本。在

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

推荐PyPI第三方库


热门话题
Gson类中的java验证错误   If和elseif之间的java差异?   字典Java8地图。输入比较器   java连接到远程计算机以获得WMI支持   java如何使用改型处理JSON对象中的空值   在Java中使用Comparator时不可编译的源代码   java将Jar添加到JSP的运行时路径   带有随机对象的while循环的java大O时间复杂性   java可以在不考虑参数的情况下模拟方法吗?   java我有一个简单的代码,它不工作。无法修复错误“println”   向eclipse添加Xively java库   java是否可以启用本机代码的缓存?   全局变量如何在Java中的所有类之间共享要使用的语言环境?   Java内存游戏如何翻转单个卡?