我尝试使用芹菜输出到多个文件。任务非常简单:
- 获取一些数据和文件路径
- 将该数据附加到文件路径(如果文件不存在,则创建该文件)
我不想每次都打开/关闭文件句柄,因为在许多情况下,我都会写入同一个文件。所以我做了一个简单的FileHandlePool。在
但是,运行时我注意到,对于每个线程/实例,celeri将生成一个新的FileHandlePool!所以,我有被重写的文件。在
处理这种情况的最好方法是什么?是否可以让m FileHandlePool与主线程处于同一范围内,并让其他celeri线程访问它?在
谢谢!在
Tags:
如果我不想让一个单独的服务(在Celery之外)同步到文件,那么在Celery中实现这一点的方法是将一个单工作池(并发性为1的池)绑定到只接受文件写入任务的特定队列。这样任务以串行方式运行,并且在编写时不会出现任何争用条件。在
或者,正如您最初建议的那样,您可以将CELERYD_池模式更改为使用线程,然后将文件句柄引用存储在任务实例上,以便可以从不同的工作线程访问它。我假设文件句柄是线程安全的。在
这个池子似乎没有被芹菜线共用。理想的方法是将写入文件的任务分配给一个进程,所有芹菜线程都应该通过队列写入该进程。在
相关问题 更多 >
编程相关推荐