Python http.server与背景中的无限循环

时间:2016-09-26 17:51:01

标签: python multithreading python-asyncio

我有一个非常基本的python http.server。它会在127.0.0.1:8081上收到请求并返回Hello World - 一切都很好)

from http.server import BaseHTTPRequestHandler, HTTPServer

class Server(BaseHTTPRequestHandler):

    def do_GET(self):

        message = 'Hello world!'

        # ... http stuff: headers, status

        self.wfile.write(bytes(message, 'utf8'))

        return

print('Starting server...')

server_address = ('127.0.0.1', 8081)
httpd = HTTPServer(server_address, Server)

print('Running server...')

httpd.serve_forever()

但是我想在bacground中创建一个无限while True循环,无论请求如何,每分钟都会制造一些魔法。

如果我在httpd.serve_forever()之前的某处添加:

import time
while True:
    print('Some magic')
    time.sleep(60)

Http服务器不会因打印Some magic

而忙于处理请求

我无法弄清楚,我该怎么用? Asincio?多线程?可能是芹菜?或者有没有办法在Server.do_GET暂时停止此循环,然后在请求继续后再次运行它?

大谢谢你的答案!

修改

我刚发现这个解决方案而不是while True循环:

import threading

def infinite_loop():
    print('Some magic')
    threading.Timer(60, infinite_loop).start()

infinite_loop()

这是python 3.5的正常计划吗?还是有更好的方法?

0 个答案:

没有答案