如何在我的扭曲服务器的后台运行我定义的刷新功能

问题描述 投票:0回答:1

我有一个简单的扭曲TCP服务器运行绝对精细,它基本上处理数据库请求并显示正确的东西它只是一个带有一堆函数的echo客户端,正在读取的数据库也更新我有这个刷新功能来打开数据库并刷新它但是如果我将它添加到消息函数中它将花费很长时间来响应,因为刷新函数需要大约6/7秒才能完成,我最初的想法是在while循环中运行此函数并且不断刷新每个5/10分钟,但在阅读了全球翻译锁之后,我认为这是不可能的,任何有关如何在我的代码背景中运行此功能的建议将不胜感激

我已经尝试在一个线程中使用它但是当我启动线程时它似乎根本没有运行,我把它放在if name =='main':函数下并且没有运气!

这是我的刷新功能

def refreshit()
    Application = win32com.client.Dispatch("Excel.Application")
    Workbook = Application.Workbooks.open(database)
    Workbook.RefreshAll()
    Workbook.Save()
    Application.Quit()
    xlsx = pd.ExcelFile(database)
    global datess
    global refss
    df = pd.read_excel(xlsx, sheet_name='Sheet1')
    datess = df.groupby('documentDate')
    refss = df.groupby('reference')


class Echo(Protocol):
    global Picked_DFS
    Picked_DFS = None
    label = None
    global errors
    global picked
    errors = []
    picked = []
    def dataReceived(self, data):
        """
        As soon as any data is received, write it back.
        """
        response = self.handle_message(data)
        print('responding with this')
        print(response)
        self.transport.write(response)

def main():
    f = Factory()
    f.protocol = Echo
    reactor.listenTCP(8000, f)
    reactor.run()

if __name__ == '__main__':
    main()

我试过这个无济于事

if __name__ == '__main__':
    main()
    thread = Thread(target = refreshit())
    thread.start()
    thread.join()
python-3.x multithreading twisted win32com
1个回答
0
投票

你在这一行上有一个重要的错误:

thread = Thread(target = refreshit())

虽然你还没有包含refreshit的定义(也许是考虑重命名的函数),但我认为refreshit是一个执行刷新的函数。

在这种情况下,你在这里做的是调用refreshit并等待它返回一个值。然后,它返回的值将用作您在此处创建的Thread的目标。这可能不是你的意思。代替:

thread = Thread(target = refreshit)

也就是说,refreshit本身就是你想要的线程目标。

您还需要确保对操作进行排序,以便所有内容同时运行:

if __name__ == '__main__':
    # Start your worker/background thread.
    thread = Thread(target = refreshit)
    thread.start()
    # Run Twisted
    main()
    # Cleanup/wait on your worker/background thread.
    thread.join()

您可能只想直接使用use Twisted's thread support而不是threading模块(但这不是强制性的)。

if __name__ == '__main__':
    # Start your worker/background thread.
    thread = Thread(target = refreshit)
    thread.start()
    # Run Twisted
    main()
    # Cleanup/wait on your worker/background thread.
    thread.join()
© www.soinside.com 2019 - 2024. All rights reserved.