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第三方库


热门话题
java如何在没有代码气味的情况下编写遵循Liskov替代和其他可靠原则的不可变映射?   java最新jre上的压缩字符串对旧编译代码有好处吗?   java是否可以在javascript中取消PrimeFaces menuitem onclick函数   mysql从SQL数据库中访问java中xml名称空间标记的值   从java程序打开excel文件   java在方法中使用“var”是否会使执行(并发)线程不安全?   java使搜索视图以一种关于AndroidManifest的通用方式可用。xml   java对如何准确使用正则表达式感到困惑?   mule如何访问java文件中的记录变量   java在从2D数组引发异常后继续   枚举当前设置为的java值   java当listview只有几个项目时,如何使alert对话框显示listview的所有项目?   java getTableRow()返回大于项大小的索引   c用java传输二进制文件(数据)   java更改多选列表项复选框颜色