- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下导致 Nuke 挂起的代码。基本上,我要做的是从文件系统中获取文件和文件夹的列表,并且我试图通过并行处理来加快速度。这在 Nuke 之外完美运行,但正如我之前所说,在 Nuke 中运行它会导致 Nuke 挂起。有没有更好的方法可以使 Nuke 不挂起?最好,我想通过 Python 的标准库或与平台无关的包来解决这个问题。但是,如果没有办法做到这一点,那我也无所谓。最坏的情况是,我将不得不回到不使用并行处理的状态并寻找其他优化方法。
此外,当我在 Nuke 中运行此代码时,我在控制台中收到以下错误:
Unknown units in -c from multiprocessing.forking import main; main()
#!/bin/env python
import multiprocessing
import os
CPU_COUNT = multiprocessing.cpu_count()
def _threaded_master(root):
in_queue = multiprocessing.JoinableQueue()
folder_queue = multiprocessing.JoinableQueue()
file_queue = multiprocessing.JoinableQueue()
in_queue.put(root)
for _ in xrange(CPU_COUNT):
multiprocessing.Process(target=_threaded_slave, args=(in_queue, folder_queue, file_queue)).start()
in_queue.join()
return {"folders": folder_queue, "files": file_queue}
def _threaded_slave(in_queue, folder_queue, file_queue):
while True:
path_item = in_queue.get()
if os.path.isdir(path_item):
for item in os.listdir(path_item):
path = os.path.join(path_item, item)
in_queue.put(path)
in_queue.task_done()
if __name__ == "__main__":
print _threaded_master(r"/path/to/root")
最佳答案
这是我使用多个线程扫描大型目录树的代码。
我最初编写代码是为了使用良好的旧multiprocessing.Pool()
,因为它非常简单并且可以为您提供函数的结果。不需要输入和输出队列。另一个区别是它使用进程而不是线程,这有一些折衷。
Pool
有一个很大的缺点:它假定您有一个要处理的静态项目列表。
因此,我按照您的原始示例重写了代码:要处理的目录的输入/输出队列,以及一个输出队列。调用者必须明确地从输出队列中获取项目。
对于 grins,我与良好的旧 os.walk()
进行了时间比较,并且......至少在我的机器上,传统的解决方案更快。这两种解决方案产生的文件数量截然不同,我无法解释。
玩得开心!
#!/bin/env python
import multiprocessing, threading, time
import logging, os, Queue, sys
logging.basicConfig(
level=logging.INFO,
format="%(asctime)-4s %(levelname)s %(threadName)s %(message)s",
datefmt="%H:%M:%S",
stream=sys.stderr,
)
def scan_dir(topdir):
try:
for name in os.listdir(topdir):
path = os.path.join(topdir, name)
yield (path, os.path.isdir(path))
except OSError:
logging.error('uhoh: %s', topdir)
def scan_dir_queue(inqueue, outqueue):
logging.info('start')
while True:
try:
dir_item = inqueue.get_nowait()
except Queue.Empty:
break
res = list( scan_dir(dir_item) )
logging.debug('- %d paths', len(res))
for path,isdir in res:
outqueue.put( (path,isdir) )
if isdir:
inqueue.put(path)
logging.info('done')
def thread_master(root):
dir_queue = Queue.Queue() # pylint: disable=E1101
dir_queue.put(root)
result_queue = Queue.Queue()
threads = [
threading.Thread(
target=scan_dir_queue, args=[dir_queue, result_queue]
)
for _ in range(multiprocessing.cpu_count())
]
for th in threads:
th.start()
for th in threads:
th.join()
return result_queue.queue
if __name__ == "__main__":
topdir = os.path.expanduser('~')
start = time.time()
res = thread_master(topdir)
print 'threaded:', time.time() - start
print len(res), 'paths'
def mywalk(topdir):
for (dirpath, _dirnames, filenames) in os.walk(topdir):
for name in filenames:
yield os.path.join(dirpath, name)
start = time.time()
res = list(mywalk(topdir))
print 'os.walk:', time.time() - start
print len(res), 'paths'
11:56:35 INFO Thread-1 start
11:56:35 INFO Thread-2 start
11:56:35 INFO Thread-3 start
11:56:35 INFO Thread-4 start
11:56:35 INFO Thread-2 done
11:56:35 INFO Thread-3 done
11:56:35 INFO Thread-4 done
11:56:42 INFO Thread-1 done
threaded: 6.49218010902
299230 paths
os.walk: 1.6940600872
175741 paths
关于Nuke 中的 Python 多处理导致 Nuke 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25532979/
我正在使用 nuke build第一次。 处理 getting started向导,我运行了以下命令: dotnet tool install Nuke.GlobalTool --global nuk
我正在尝试使用 Nuke 来运行 VSTest,因为我的一些测试在 .Net Framework(非核心)中。 我有一个成功运行的测试: VSTest(@".\test\MyTestProjectFo
我有以下导致 Nuke 挂起的代码。基本上,我要做的是从文件系统中获取文件和文件夹的列表,并且我试图通过并行处理来加快速度。这在 Nuke 之外完美运行,但正如我之前所说,在 Nuke 中运行它会导致
nuke.allNodes() 可以过滤一个特定的节点类,即 nuke.allNodes("Transform")。但如果我想让它过滤更多怎么办?有解决办法吗? 也许将它们放在:var = [] 但是
为了熟悉 Nuke 的 Python,我正在创建一个在节点图中进行的小游戏,但在尝试使用函数移动我的“角色”时遇到了障碍。该角色是一个点,该函数尝试读取其在 X 和 Y 中的位置,以确定它可以移动的方
我有一个以相机作为输入的 gizmoB。 GizmoB 位于 GizmoA 中,GizmoA 也将相机作为输入。我希望 gizmoB 能够通过表达式访问相机。但是,我所做的一切似乎都没有用。 XML
有没有办法到完全删除 Subversion 存储库以便用户无法访问旧版本? PS:我在存储库机器上有 root 访问权限。 最佳答案 只需删除存储库的根文件夹,但保存 conf/里面有文件夹。然后,使
我是一名 VFX 教师,目前当我想抓取节点图的图像以在讲座幻灯片中使用时,我必须将节点图全屏显示并进行屏幕截图,但正如您可以想象的那样,我必须使用更大的脚本缩小到有时无法识别。 在我看来,当您放大和缩
作为本地颠覆沙皇,我向大家解释在存储库中仅保留源代码和非大型文本文件,而不是大型二进制数据文件。也许是测试的一部分的较小的二进制文件。 不幸的是,我与人类一起工作!有一天,有人可能会意外提交 800M
我一直使用 Nuke,并且我知道简单的 Python 可以在其中创建简单的工具。我已经能够使用面板和工具执行中等复杂的操作,但我遇到了一些应该非常简单的事情,但我似乎无法在这里或在 nukepedia
这是我的问题: 我想为每个选定的节点创建一个复选框。我已经设法为每个节点创建具有正确名称的复选框,但问题是在复选框中选择它们并打印结果的位置仅返回选定的第一个节点或 bool 结果(True 或 Fa
我正在 Nuke10 中编写时间线同步脚本。我应该更改全局框架设置。示例: nuke.root().knob('first_frame').setValue(1) nuke.root().knob('
我们丢失了匹配的加密密码,不得不破坏我们现有的配置文件。我要确保运行 fastlane nuke development fastlane nuke distribution fastlane nuk
我需要以编程方式获取 Nuke 脚本中使用的所有字体的位置。如果您在 GUI 中打开文本节点,您可以在 Font 下看到字体文件路径,但是使用以下代码我只能获得字体系列、字体样式的元组。这让我完成了部
我正在尝试运行 https://github.com/rebuy-de/aws-nuke并传递交互式提示的答案。脚本要求帐户别名(两次)。不幸的是它只通过了第一个答案,第二个答案被省略。我得到的错误:
我正在使用脚本编辑器将多个 Nuke 节点分组在一起。我想减少使用旋钮界面的输入数量。其中之一是选择图像文件。所以我正在使用 ux_File = nuke.File_Knob("my_file", "
我有一个现有模块,我在其中修改了一个包含一些 HTML 数据的用户控件。这在我的页面上显示正常。 现在,我想执行按钮点击事件。我的代码如下。 User Control .ascx Page ....
我正在使用 Lawnchair使用我的网络客户端 (Firefox 13.0) 的“dom 适配器”存储持久数据并达到存储配额。 Console.log 说 Persistent storage ma
*这更多的是一个架构级别的问题。 我是 DNN 开发的新手,我们正在尝试构建一个电子商务网站,该网站将展示与我们当前订单数据库绑定(bind)的所有产品。 我假设我通过 DNN 进行的任何自定义开发都
我正在为一个客户开发一个 .net nuke 站点,他们想要上传大约 60mbs 的文件。我已经更改了 web.config 文件以允许最大 65mbs 的文件大小,只是为了回旋余地。 httpRun
我是一名优秀的程序员,十分优秀!