我使用的是MongoDB、python3和pymongo的本地(“社区”)版本。你知道吗
首先,我在一个单独的shell中手动启动MongoDB守护程序(mongod
),然后运行Python脚本。这个脚本使用pymongo成功地实例化MongoDB客户机(mongo
),并与我的数据库交互。当脚本终止时,我将通过向其PID发送kill
命令来手动终止守护进程。你知道吗
虽然这一切都很好,但这个脚本的目标是尽可能地自动化。因此,我希望通过脚本合并守护进程的启动和终止,但它必须是异步的,这样就不会阻止主代码运行。我尝试使用subprocess.Popen()
,然后使用一个Thread
类,daemon属性设置为true
——但是我仍然看到在整个程序退出后调用ps
时mongod
进程启动并运行。你知道吗
下面是Thread
类:
class MongoDaemonThread(object):
def __init__(self):
thread = threading.Thread(target=self.run, args=())
thread.daemon = True
thread.start()
def run(self):
mongo_daemon = subprocess.Popen('/Users/<me>/.mongodb/bin/mongod')
return mongo_daemon
下面是我与数据库交互的函数:
def db_write(report_list, args):
# ...
client = MongoClient()
db = client.cbf
# ...
reports = db.reports
for report in report_list:
report_id = reports.insert_one(report).inserted_id
# ...
我希望通过Python执行以下操作(不管是一个脚本还是多个脚本):
mongod
(与其他代码/在后台异步,并让它侦听来自Mongo客户机的连接)(#TODO
)#TODO
)线程是正确的方法吗?如果是,我做错了什么?如果线程不是答案,你建议我用什么方法来代替?你知道吗
This answer使用
p = Popen()
然后p.terminate()
似乎正是我想要的。你知道吗首先,您不应该从python启动
mongod
进程。mongod
应该从shell启动和停止。因为数据库必须随时准备好连接。但是,如果您真的想从python中执行此操作,您仍然可以使用:启动
mongod
进程。你知道吗要结束此过程:
相关问题 更多 >
编程相关推荐