我有一个python函数,每当我发一个特定的数字时都会被调用。 (回发函数,在烧瓶上运行,并侦听传入的短信。
我还有一个功能,它有一个设定的时间表,每5分钟运行一次,并从列表中读取并删除一些条目。
现在唯一的问题是这两个函数都是从同一个列表中读取的。
我担心在调用调度函数(每5分钟)运行时,也会调用处理短信的回发函数。我们两个都在同一时间运行,并且两者都试图同时从阵列中读取。或者如果函数a从列表中读取WHILE函数b正在写入列表。
这是我的准确担心吗?可以在同一时间调用这两个函数吗?或者它们永远不会同时从同一个列表中读取。
我研究了与芹菜的异步请求,但这并没有解决问题。每隔5分钟运行一次的函数仍然可以调用与调用celery函数完全相同的时间,从而破坏列表。
谢谢,我只是困惑
答案 0 :(得分:0)
您的担忧是合理的,应该用代码处理。
一般来说,列表在python中是线程安全的,但如果列表中的数据不是,那仍然会导致问题,请参阅以下答案:
您描述的问题类型非常常见,根据您的需求可以通过多种方式解决:
1)使用锁来保护列表: Python threading. How do I lock a thread?
2)重新考虑该方法,并将访问此特定列表的所有逻辑放入计时器中。然后,每当有文本消息进入时,您将信息推入队列并从该队列读取到计时器中。这使两个线程分离。来自另一个问题的示例(该问题解决了另一个有趣的问题,但您只需查看队列使用情况):Threading in python using queue