Python瓶贴请求 - 担心同时运行2个函数

时间:2018-03-04 22:44:59

标签: python flask

我有一个python函数,每当我发一个特定的数字时都会被调用。 (回发函数,在烧瓶上运行,并侦听传入的短信。

我还有一个功能,它有一个设定的时间表,每5分钟运行一次,并从列表中读取并删除一些条目。

现在唯一的问题是这两个函数都是从同一个列表中读取的。

我担心在调用调度函数(每5分钟)运行时,也会调用处理短信的回发函数。我们两个都在同一时间运行,并且两者都试图同时从阵列中读取。或者如果函数a从列表中读取WHILE函数b正在写入列表。

这是我的准确担心吗?可以在同一时间调用这两个函数吗?或者它们永远不会同时从同一个列表中读取。

我研究了与芹菜的异步请求,但这并没有解决问题。每隔5分钟运行一次的函数仍然可以调用与调用celery函数完全相同的时间,从而破坏列表。

谢谢,我只是困惑

1 个答案:

答案 0 :(得分:0)

您的担忧是合理的,应该用代码处理。

一般来说,列表在python中是线程安全的,但如果列表中的数据不是,那仍然会导致问题,请参阅以下答案:

Are lists thread-safe?

您描述的问题类型非常常见,根据您的需求可以通过多种方式解决:

1)使用锁来保护列表: Python threading. How do I lock a thread?

2)重新考虑该方法,并将访问此特定列表的所有逻辑放入计时器。然后,每当有文本消息进入时,您将信息推入队列并从该队列读取到计时器中。这使两个线程分离。来自另一个问题的示例(该问题解决了另一个有趣的问题,但您只需查看队列使用情况):Threading in python using queue