我做了一些研究,但是如果有两个用户发送了数据,我似乎无法找到办法,但Python脚本只能处理一个。
这通常是脚本的工作原理:
1) User Enters Data '123'
2) Python listener executes on Data
|
| Sends requests to server and retrieves data (typically ~1 min)
| Script writes to HTML files
|
3) Finishes writing to files, waits for more User input
现在的问题是,如果另一个用户在该步骤2 - 3阶段输入数据,则该脚本不再侦听,并且不会对此数据执行任何操作。
无论如何,我可以让它始终监听更改,一旦完成,将其传递给自己的类或其他实体,以便它可以继续侦听另一个异步更改?
修改
答案 0 :(得分:0)
您正在描述客户端 - 服务器架构。
当您假设多个客户端使用相同的服务时,您必须允许某种多处理。
Web服务器是典型的例子,但还有很多其他的。
在您的任务中,需要以下角色:
你所描述的似乎是所有这些的混合物。当你编写代码时,你通常会开始考虑一个脚本,这就是后来最终在工作中的内容。
在设计解决方案时,您必须决定通信技术。有任何选择,有些是:
您必须编写所有三个部分 - 客户端,服务器和工作人员。
基于zeromq的客户端服务器解决方案的一个简单示例在我的回答Distributed lock manager
中答案 1 :(得分:0)
虽然我仍然不确定为什么你没有服务器本身处理这个,但是我从Python脚本处理它的建议是使用multiprocessing模块。这是使用单个工作进程处理此问题的一种非常基本的方法:
from multiprocessing import Queue, Process
import multiprocessing
def worker(e, m):
while True:
e.wait() # Wait to be told the file has changed. This will block.
e.clear() # Clear the flag so the main thread can set it again if changes happen while we process
# Send request to server, retrieve data
# Write to HTML files
def watch_file_for_changes():
while True:
if file_changed: # Use whatever watching mechanism you already have for this; inotify, etc.
e.set() # Tell the worker to process the file. This unblocks e.wait()
if __name__ == "__main__":
e = Event()
# Start some workers. You can choose whatever number you want.
p = multiprocessing.Process(target=worker, args=(e,))
p.start()
watch_file_for_changes()
这是完全未经测试的,需要一些清理,但应该给你一般的想法。这也假设您的工作人员足够聪明,可以确定是否已在文本文件中添加了多个新条目。