如何以功能方式处理多个线程,单个结果?

时间:2015-07-21 22:53:58

标签: multithreading functional-programming

这不是一个纯粹的'功能性问题,因为它涉及副作用。我有一个功能,可能需要10秒,比如完成。该函数在数据库中生成数据(例如)。如果它同时运行两次,它将创建重复数据。假设可以通过单击浏览器中的按钮来触发该功能。如果两个人在几秒钟内相互点击,那么该功能可以同时运行两次。

在Java和类似的系统中,我会在信号量上使用同步。在Node或Django中,我可以利用单线程来删除并行运行。

running = False

def long_running_process():
  global running

  # only run once
  if running: return

  try:
    running = True
    .... go to it ...
  finally:
    running = False

Python中对全局引用的要求清楚地暗示了这个函数需要状态 - 因此本质上是必要的。

所以,对我的问题。

  1. '纯粹'需要不变性的功能程序可以解决这个问题吗?
  2. 我怎样才能在Python中实现它(例如)?
  3. 我是使用反应式Python库的最佳选择吗?
  4. 我已经知道Haskell的人会告诉我创建一个Monad状态,但是Clojure或Elixir会怎么处理呢?

0 个答案:

没有答案