我不熟悉芹菜和Python,对两者都有粗略的了解。
我有多个Ubuntu服务器,都运行多个芹菜工人(10-15)。
每一个工人都需要使用第三方库/DLL来执行特定的任务。为此,我们首先
需要实例化类对象并将其存储在内存中。
然后Celery工作人员读取RMQ队列以执行使用上述类对象方法的特定任务。
目标是实例化第三方类对象一次(当celerty worker启动时),然后在任务执行时,
使用类实例方法。一直重复这样做。在
我不想使用REDIS,因为存储如此少量的数据(类对象)的开销太大了。
我需要帮助了解如何为每个worker存储这个实例化的类对象。显然,如果worker失败或崩溃,我们将再次实例化该类,这不是问题。任何帮助(特别是代码示例)都会有很大帮助。在
为了提供更多的相似性,我的需求类似于为每个worker提供一个惟一的数据库连接,并在每次重复请求时使用相同的连接。
更新了一些写得不好的代码:
在任务.py在from celery import Celery, Task
#Declares the config file and this worker file
mycelery = Celery('tasks')
mycelery.config_from_object('celeryconfig2')
class IQ(Task):
_db = None
@property
def db(self):
if self._db is None:
print 'establish DB connection....'
self._db = Database.Connect()
return self._db
@mycelery.task(base=IQ)
def indexIQ():
print 'calling indexing.....'
if index.db is None:
print 'DB connection doesn't exist. Let's create one...'
....
....
print 'continue indexing!'
在主.py在
^{pr2}$
预期产量calling indexing.....
DB connection doesn't exist. Let's create one...
establish DB connection....
continue indexing!
calling indexing.....
continue indexing!
calling indexing.....
continue indexing!
不幸的是,我总是得到前4行输出,这意味着每次执行任务时都会发生数据库连接。我做错什么了?
谢谢