我收到了一个Python项目(恰好是一个Django项目,如果这很重要的话),它使用fcntl标准库中的模块,该模块似乎仅在Linux上可用.当我尝试在我的Windows机器上运行它时,它会停止ImportError,因为此模块在此处不存在.
我有什么方法可以对程序进行一些小改动,使其在Windows上运行?
我想在Django服务器启动时执行一些代码,但我希望它只运行一次.目前,当我启动服务器时,它执行了两次.文档说这可能发生,并且:
您应该在AppConfig类上放置一个标志,以防止重新运行应该执行一次的代码.
知道怎么做到这一点?下面的打印声明仍然执行两次.
from django.apps import AppConfig
import app.mqtt
from apscheduler.schedulers.background import BackgroundScheduler
class MyAppConfig(AppConfig):
name = 'app'
verbose_name = "HomeIoT"
run_already = False
def ready(self):
if MyAppConfig.run_already: return
MyAppConfig.run_already = True
print("Hello")
Run Code Online (Sandbox Code Playgroud) 我正在使用WxPython中的GUI应用程序,我不确定如何确保在计算机上的任何给定时间只运行我的应用程序的一个副本.由于应用程序的性质,运行不止一次没有任何意义,并且会很快失败.在Win32下,我可以简单地创建一个名为mutex并在启动时检查它.不幸的是,我不知道Linux中可以做到这一点的任何设施.
如果应用程序意外崩溃,我正在寻找会自动发布的内容.我不想让我的用户不得不手动删除锁定文件,因为我崩溃了.
我需要找到一种正确的方法来阻止我的(Python)程序的两个运行实例.我目前正在使用以下方法.
在Windows上,
os.popen('wmic process get caption,processid | findstr `programname.exe`')
Run Code Online (Sandbox Code Playgroud)
在Linux上,
os.popen('ps x | grep `programname`')
Run Code Online (Sandbox Code Playgroud)
它似乎现在工作正常.这种方法是否正确?有人可以向我建议一个更好的方法吗?
编辑:感谢回复家伙,上述方法有什么问题吗?我尝试了linux的pid文件方式.如果pid文件以某种方式被删除怎么办?
可能重复:
Python:单个程序实例
我需要阻止cron作业在作业需要更长时间才能完成而不是启动器间隔时运行并发实例.我正在尝试使用flock概念来实现这一点,但fcntl模块的行为并不像我期望的那样.
任何人都可以告诉我为什么这可以防止两个并发实例:
import sys
import time
import fcntl
file_path = '/var/lock/test.py'
file_handle = open(file_path, 'w')
try:
fcntl.lockf(file_handle, fcntl.LOCK_EX | fcntl.LOCK_NB)
print 'no other instance is running'
for i in range(5):
time.sleep(1)
print i + 1
except IOError:
print 'another instance is running exiting now'
sys.exit(0)
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用:
import sys
import time
import fcntl
def file_is_locked(file_path):
file_handle = open(file_path, 'w')
try:
fcntl.lockf(file_handle, fcntl.LOCK_EX | fcntl.LOCK_NB)
return False
except IOError:
return True
file_path = '/var/lock/test.py'
if file_is_locked(file_path):
print 'another instance is …Run Code Online (Sandbox Code Playgroud) 我需要在我的python脚本中添加一个函数来检查当前脚本是否已经在运行.如果是,那么它将退出,如果不是它继续运行脚本.我已经研究过这样做的方法,但我无法弄清楚如何做到这一点.
我正在使用 Objective-c 在 Mac 中编写命令行应用程序
在应用程序启动时,我想检查同一应用程序的另一个实例是否已经在运行。如果是,那么我应该等待它完成或退出当前实例或退出其他实例等。
有什么办法可以做到这一点吗?
macos objective-c command-line-tool osx-snow-leopard osx-lion
我想知道如何在已经运行的时候停止当前的python脚本.
要清楚,我想用我自己的python脚本编写它.所以首先,在main方法中,它将检查我的python脚本是否已经运行.如果它正在运行,我想退出并显示错误消息.
目前我正在尝试此代码:
if os.system("ps ax | grep sample_python.py") == True:
print "fail"
exit(0)
else:
print "pass"
Run Code Online (Sandbox Code Playgroud)
上面的代码看起来像是grepping python名称..但它总是转到else循环而不是进入if循环并退出..
因此,出于测试目的,我运行我的脚本,并在另一个终端上再次运行我的脚本.第一个脚本不会停止,但第二个python不会进入if循环打印出错误消息.
我怎样才能解决这个问题?
好吧,我发现了一个愚蠢的事情,我想看看是否有人可以帮助我绕过它..所以我的观点是杀死刚开始的python,如果另一个python正在运行..但是愚蠢的事情是..因为我我正在运行我的python并在这个python中运行一个检查编码..它将一直退出..因为我一启动python PID将被创建并将运行...
所以.. python启动 - > pid创建并运行 - >检查python是否正在运行 - >是的python正在运行 - >退出.
我想看看是否有办法进行python启动 - >检查python是否已经运行 - >如果正在运行则杀死当前的python而不是正在运行的python.