gpt4 book ai didi

python - 在后台运行 python 脚本

转载 作者:行者123 更新时间:2023-11-28 18:38:05 24 4
gpt4 key购买 nike

我的脚本是一个监听客户端请求并发送响应的服务器。它通过线程处理请求:

class Server:

def __init__(self):
self.host = ''
self.port = 50000
self.backlog = 5
self.size = 1024
self.server = None
self.threads = []

def open_socket(self):
try:
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server.bind((self.host,self.port))
self.server.listen(5)
except socket.error, (value,message):
if self.server:
self.server.close()
print "Could not open socket: " + message
sys.exit(1)

def run(self):
self.open_socket()
input = [self.server,sys.stdin]
running = 1
while running:
inputready,outputready,exceptready = select.select(input,[],[])

for s in inputready:

if s == self.server:
# handle the server socket
c = Client(self.server.accept())
c.start()
self.threads.append(c)

elif s == sys.stdin:
# handle standard input
junk = sys.stdin.readline()
running = 0

# close all threads

self.server.close()
for c in self.threads:
c.join()

class Client(threading.Thread):
def __init__(self,(client,address)):
threading.Thread.__init__(self)
self.client = client
self.address = address
self.size = 1024

def run(self):
running = 1
while running:
data = self.client.recv(self.size)
if data:
data2 = data.split()
if data2[0] == 'Hello':
status = 'Hello'
#fetch from database users by location
reply= '6'


if data2[0] == 'Index':
status = 'Index'
#fetch from database users by location
reply='I'

db = MySQLdb.connect(host="localhost", # your host, usually localhost
user="root", # your username
passwd="Rambo_9134", # your password
db="secure_login") # name of the data base

# you must create a Cursor object. It will let
# you execute all the queries you need
cur = db.cursor()

# Use all the SQL you like
cur.execute("SELECT ml.member,m.username FROM locations l JOIN memberlocation ml ON(l.id = ml.location) JOIN members m ON(m.id = ml.member) where l.id = 1;")
# print all the first cell of all the rows
data = []
for row in cur.fetchall() :
print row[1]
data.append({row[0]:row[1]})
print 'JSON', json.dumps(data)
reply = data


self.client.send(json.dumps(reply))
else:
self.client.close()
running = 0

if __name__ == "__main__":
s = Server()
s.run()

这个脚本运行完美,但当我按下 enter 时它停止了。我尝试了很多替代方案:守护进程、nohup、……我无法让它作为后台服务运行。我认为这是一个编程问题

如何让这个脚本作为服务在后台运行?

最佳答案

要在测试/开发环境中快速简便地使用 screen

screen -S mySessionName

这将启动一个名为 mySessionName 的新屏幕 session 并附加到该 session 。在此 session 中,您现在可以运行您的代码。

使用 Ctrl+A, D 从该 session 中分离。您的代码将继续运行。

要重新附加到该 session ,请使用:

screen -r mySessionName

要显示所有 session ,请使用:

screen -ls

但是在生产环境中,您应该查看 supervisor。这serverfault question可能有帮助。

关于python - 在后台运行 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30446103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com