使用多处理(如mp )的python (v3.7)脚本有多个问题。其中之一是我的计算以"OSError: Errno 24太多打开的文件“结尾。我的脚本和模块很复杂,所以我将问题分解为以下代码:
def worker(n):
time.sleep(1)
n = 2000
procs = [mp.Process(target=worker, args=(i,)) for i in range(n)]
nprocs = 40
i = 0
while i<n:
if (len(mp.active_children())<=nprocs):
我有一个代码,在Ubuntu上的12核vcpu上使用超过10000个文件的多处理。
def process_file(name):
inp = open(name)
out = open(name.split('.')[0]+'wikiout.txt','a')
for row in inp:
row = row.strip()
sent_text = nltk.sent_tokenize(text)
for sent in sent_text:
#
可能重复:
我使用open在Python中打开一个文件。我将文件处理封装在一个with语句中,如下所示:
with open(path, 'r') as f:
# do something with f
# this part might throw an exception
这样,即使抛出异常,我确信我的文件已经关闭。
但是,我想处理打开文件失败(抛出一个OSError )的情况。一种方法是将整个with块放入一个try:中。只要文件处理代码不抛出OSError,这就可以工作。
它可能看起来像:
try:
with open(path,
我使用Python的multiprocessing.Pool类在进程之间分发任务。
这个简单的案例如预期的那样工作:
from multiprocessing import Pool
def evaluate:
do_something()
pool = Pool(processes=N)
for task in tasks:
pool.apply_async(evaluate, (data,))
N个进程被生成,它们不断地工作在我传递给apply_async的任务中。现在,我有另一个例子,我有许多不同的非常复杂的对象,每个对象都需要做大量的计算活动。最初,我允许每个对象在
我想从另一个python中打开python脚本,但是在virtualenv中,我尝试了os.system和subprocess.call,但是他们无法打开虚拟文件
os.system("workon cv") warning:
sh: 1: workon: not found
cmd = 'workon cv'
subprocess.call(cmd.split()) error:
OSError: [Errno 2] No such file or directory
我希望在python中编辑一个Min克拉夫特Windows 10 level.dat文件。我尝试过使用包nbt和pyanvil,但是得到了错误OSError: Not a gzipped file。如果我打印open("level.dat", "rb").read(),我会得到很多毫无意义的数据。它似乎需要被解码,但我不知道它需要什么解码。如何打开(理想情况下是编辑)这些文件之一?
我正在尝试用python打开一个文件,并在该文件不存在时打印一条消息。但是当异常发生时,我对是否关闭文件感到困惑。 try:
file = open(sys.argv[1], "r")
file.close() # should I do this?
except OSError:
print(f"{sys.argv[1]} file not found.")
我使用以下代码打开1.png,得到一些错误:
>>> from PIL import Image
>>> im = Image.open("1.png")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/site-packages/PIL/Image.py", line 2519, in open
% (filenam
有没有一种方法可以跟踪python进程来检查文件被打开的位置。当我在我运行的进程上使用lsof时,我打开了太多的文件,但我不确定它们是在哪里打开的。 ls /proc/$pid/fd/ | wc -l 我怀疑我正在使用的某个库可能没有正确处理这些文件。有没有一种方法可以准确地隔离文件在我的python代码中的哪一行被打开? 在我的代码中,我使用第三方库来处理数以千计的媒体文件,因为它们是打开的,所以我收到以下错误 OSError: [Errno 24] Too many open files 在跑了几分钟之后。现在我知道提高打开文件的限制是一种选择,但这只会将错误推到以后的时间点。
我是一个初学者,尝试打开一个文件作为函数的一部分,其中文件名/路径是函数中的变量。我写了一个,但是在类似的函数上出现了一个错误。下面是函数代码:
def read_board(board_file):
""" (file path) -> list of str
Return a board read from open file board_file.
>>>read_board('C:\Python33\Doc\theboard1.txt')
"""
b
我想知道一个文件是否已经存在,如果已经存在,我想要创建一个扩展名和数字的文件。我试图用错误处理来完成这一任务,但是我必须将代码写50次。
以下是代码:
for x in range(50):
po = 1
try:
os.makedirs(acct)
except OSError, e:
try:
os.makedirs(acct + "-"+str(po))
po +=1
except OSError, e:
print "Something is broken! Line 14-15"
我对python fcntl库中的lockf函数的行为感到困惑:我无法获得共享锁,而独占的锁工作:
In [1]: import fcntl
In [2]: f = open('file', 'w')
In [3]: fcntl.lockf(f, fcntl.LOCK_SH | fcntl.LOCK_NB)
有人无意中移动了python程序使用的打开的日志文件。该程序使用带有TimedRotatingFileHandler的日志模块。当滚动文件的时间到了,这个错误就会被输出:
Traceback (most recent call last):
File "/python_root/lib/logging/handlers.py", line 78, in emit
self.doRollover()
File "/python_root/lib/logging/handlers.py", line 338, in doRollover
os.r