subprocess.call nohup & - 运行 不在后台处理
subprocess.call nohup & - doesn't run process in background
我有一个运行 Scrapy 蜘蛛的函数(Django 管理)。该功能正常工作。我现在要做的是让它成为非阻塞的。
这按预期工作 - 我需要等待 SH 脚本完成。所以基本上我点击这个动作,浏览器正在等待抓取结束。
subprocess.call([settings.CRAWL_SH_ABS_PATH, "db_profiles_spider", "ids", ids])
我希望它是非阻塞的,以便浏览器立即刷新。
我试过这个:
subprocess.call(["nohup",settings.CRAWL_SH_ABS_PATH, "db_profiles_spider", "ids", ids, '&'])
但它似乎正在阻塞,浏览器正在等待响应。为什么?我怎样才能让它发挥作用?
&
用于 shell 所以尝试这样:
cmd = ' '.join(["nohup", settings.CRAWL_SH_ABS_PATH, "db_profiles_spider",
"ids", ids, '&'])
subprocess.call(cmd, shell=True)
更新:
对我来说,不使用 nohup
也可以。
您还可以创建一个线程并 运行 该线程中的命令。 os.fork()
和运行子进程中的命令也可以。
我有一个运行 Scrapy 蜘蛛的函数(Django 管理)。该功能正常工作。我现在要做的是让它成为非阻塞的。
这按预期工作 - 我需要等待 SH 脚本完成。所以基本上我点击这个动作,浏览器正在等待抓取结束。
subprocess.call([settings.CRAWL_SH_ABS_PATH, "db_profiles_spider", "ids", ids])
我希望它是非阻塞的,以便浏览器立即刷新。
我试过这个:
subprocess.call(["nohup",settings.CRAWL_SH_ABS_PATH, "db_profiles_spider", "ids", ids, '&'])
但它似乎正在阻塞,浏览器正在等待响应。为什么?我怎样才能让它发挥作用?
&
用于 shell 所以尝试这样:
cmd = ' '.join(["nohup", settings.CRAWL_SH_ABS_PATH, "db_profiles_spider",
"ids", ids, '&'])
subprocess.call(cmd, shell=True)
更新:
对我来说,不使用 nohup
也可以。
您还可以创建一个线程并 运行 该线程中的命令。 os.fork()
和运行子进程中的命令也可以。