Python程序中不同程序之间的同步

2024-04-28 14:48:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个自动化系统,它由一系列程序组成,每个程序执行一项特定的任务。比如说,我有一个名为“Downloader.py”的程序,它下载一些文本文件,“Processor.py”处理该文件,“Uploader.py”上载处理后的文件。因此,我没有执行串行执行,而是通过实验发现,如果这些任务是并行执行的,效率会高得多。因此,现在我运行2个downloader实例(它同时下载多个文本文件)、5个processor实例(因为处理速度慢得多,所以要处理的任何空闲文件都会快速、同时地处理),以及1个uploader实例(非常快,因此处理后的文件一准备好就会上传)

现在,为了在实例之间进行同步,我使用了一个本地MySql数据库,然后它存储了一个要处理的文件队列。因此,如果一个实例拾取一个文件(标记为“就绪”),我会在数据库中将其标记为“未处理”,以便另一个实例处理下一个“就绪”文件

现在的问题是,有时两个实例拾取完全相同的文件并处理相同的事情。那么,有没有办法在不锁定数据库的情况下解决这个问题呢(尝试过这个,但速度太慢,因为在我的应用程序中有12个不同的程序,每个程序有5~6个实例,所有实例都同时ping一个数据库)

任何其他不涉及数据库的方法也被接受,最终需要某种互斥。 注意:整个代码在Python 3.7中


Tags: 文件实例py标记程序数据库系统downloader