Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';这是传递上下文函数的干净方法吗?_Python_Multithreading_Locking - Fatal编程技术网

Python 什么';这是传递上下文函数的干净方法吗?

Python 什么';这是传递上下文函数的干净方法吗?,python,multithreading,locking,Python,Multithreading,Locking,我正在尝试使用锁作为上下文来管理同步文件操作。然而,当一个函数调用另一个需要锁的函数时,我将永远阻塞 例如: from threading import Lock lock = Lock() def foo(): print('foo') with lock: print('foo-locked') bar() def bar(): print('bar') with lock: print("bar-loc

我正在尝试使用锁作为上下文来管理同步文件操作。然而,当一个函数调用另一个需要锁的函数时,我将永远阻塞

例如:

from threading import Lock
lock = Lock()


def foo():
    print('foo')
    with lock:
        print('foo-locked')
        bar()


def bar():
    print('bar')
    with lock:
        print("bar-locked")  # Will not print since lock is owned by foo()

foo()

有没有一种干净的方法可以将一个函数的上下文传递给另一个函数?我宁愿不把锁作为一个参数发送——那么我会在一些函数中使用上下文管理器,而不是在其他函数中使用。只要需要锁的两个函数在同一个线程中,它们就可以继续

在我看来,试图从另一个函数的锁中调用一个使用函数的锁似乎是设计上的冲突。尝试设计非重叠的代码部分/函数,然后可以使用锁来确保互斥。您是否知道您的示例是单线程的,所以在这里使用锁没有意义?是的!只是想将问题情境化。这可能不能解决所有用例,但它确实帮助了我的用例!