python中特定于线程的os.chdir和mkdir是什么?

python中特定于线程的os.chdir和mkdir是什么?,python,multithreading,operating-system,Python,Multithreading,Operating System,我有几个线程,每个线程都在更改工作目录,偶尔在特定的工作目录中创建新的目录,复制/移动这些目录中的文件等。例如: def thread1: while True: os.chdir('dir') os.mkdir('newdir') os.system('mv *.png newdir/') do something def thread2: while True: os.chdir('another-dir') os.mkdir('an

我有几个线程,每个线程都在更改工作目录,偶尔在特定的工作目录中创建新的目录,复制/移动这些目录中的文件等。例如:

def thread1:
  while True:
    os.chdir('dir')
    os.mkdir('newdir')
    os.system('mv *.png newdir/')
    do something

def thread2:
  while True:
    os.chdir('another-dir')
    os.mkdir('another-newdir')
    os.system('mv *.png another-newdir/')
    do something

我已经读到chdir、mkdir函数不是特定于线程的,而是全局的。实现这一目标的方法是什么?我可以尝试使用绝对路径,但这是最佳解决方案吗?

工作目录是进程的信息,因此所有线程共享同一个工作目录。如果要使用多个线程,则必须使用绝对路径

使用该模块可以很容易地获得绝对路径

您可以考虑使用Python的标准库来进行复制,而不是调用外部进程。

例如,见:


操作系统级别的当前工作目录通常是进程特定的,而不是每个线程。(Linux:请参阅)

Python内部文件操作大多可以重写为使用
os.path.join()
和避免
chdir()

如果这是不可能的,例如,对于不可更改的代码,对于
RExec
类型的沙盒执行等,那么您可以提供一个虚拟
os
模块,
open
函数等,在幕后进行路径调整


对于调用外部程序,您可以在subprocess.Popen()calls and friends中提供一个
cwd=…
参数。

与其使用多个线程,不如使用多个进程来解决问题

寻找

我有在多个磁盘上工作的备份脚本,通过对每个磁盘使用一个进程,我可以确保所有磁盘上的磁盘利用率保持在100%


有许多其他库可以以类似于线程池的方式管理进程池,我最喜欢的是这个包。

可能不是很有用,但Linux上有一个解决方案(在其他操作系统上不存在,也不暴露于Python AFAIK):要了解更多信息,请执行
man mkdirat
。@ArminRigo,“是POSIX。”皮尔克罗:你说得对。此外,它还被添加到Python 3.3中,例如,您可以说
os.open(…,dir\u fd=fd)
@ArminRigo我不知道
mkdirat
,但我仍然希望避免这样做,并显式使用绝对路径。解决这个问题的一个快速方法是永远不要调用
os.chdir()
。在您的情况下,它将变成
os.mkdir('dir/newdir');操作系统('cd dir&&mv*.png newdir/')
。请注意,
cd
在shell命令中。另一种解决方案(仅在Linux上)是使用
unshare(CLONE_FS)
函数,但这肯定需要编写C或使用ctypes/cffi。