小编dyl*_*oll的帖子

IOLoop.current().run_in_executor() 和 ThreadPoolExecutor().submit() 的区别

我对 Python Tornado 很陌生,一直在尝试启动一个新线程来运行一些 IO 阻塞代码,同时允许服务器继续处理新请求。我一直在做一些阅读,但似乎仍然无法弄清楚这两个功能之间的区别是什么?

例如调用这样的方法:

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(1) as executor:
    future = executor.submit(report.write_gresb_workbook)
    print(future.result())
Run Code Online (Sandbox Code Playgroud)

相比:

from concurrent.futures import ThreadPoolExecutor
from tornado import ioloop

with ThreadPoolExecutor(1) as executor:
    my_success = await ioloop.IOLoop.current().run_in_executor(executor, report.write_gresb_workbook)
    print(my_success)
Run Code Online (Sandbox Code Playgroud)

write_gresb_workbook 从对象报告中获取一些信息并将其写入 Excel 电子表格(但是我使用 openpyxl 需要大约 20 秒才能加载适当格式的工作簿,另外大约需要 20 秒才能保存它,这会阻止服务器处理新请求!)

该函数简单地返回 True 或 False(这是什么my_success),因为报告对象具有附加到它的输出文件的路径。

我还没有完全使用这些方法中的任何一种,所以它们可能不正确,但只是在寻找一些背景信息。

干杯!

python tornado threadpoolexecutor

4
推荐指数
1
解决办法
447
查看次数

如何复制 bash 对作为参数传递给其他命令的命令的转义

编辑2:有点迟来的编辑来总结对此问题的评论。我误解了 bash 的工作原理,并将其与 python 的工作原理混淆了。我推测 Bash 转义了命令的输出kubectl,因此在传递给 python 命令时它不会被分解为多个参数。(即如何转义 python 字符串中的引号以阻止字符串被分解。)

实际上,当用引号括住命令的输出时,Bash 能够将命令执行的输出作为单个参数传递。它不会逃避任何事情,它也不会尝试解释这一切。我遇到的问题实际上是 PyCharm 缺乏将复杂字符串作为单个参数传递的功能,而 PyCharm 可以将带有空格的字符串解析为多个参数。


我将命令执行结果作为输入传递给 python,如下所示:

$ python parse_ips.py "$(kubectl get configmap ...)"
Run Code Online (Sandbox Code Playgroud)

从命令行执行时效果很好,但我现在尝试使用 PyCharm 编辑文件。因此,我需要该命令结果的转义版本,我可以将其粘贴到 PyCharm 的调试配置中,因为我无法像在命令行上那样实时执行该命令。

但是,我正在努力寻找一种在幕后复制转义 bash 的方法,因此我可以将结果用作 PyCharm 配置中的参数。运行上述kubectl命令会产生一个包含空格和引号的多行字符串。当我将其粘贴到 PyCharm 中时,它只是将其解释为多个参数。我正在寻找转义结果,我可以将其直接粘贴到命令行中,或粘贴到 PyCharm 的调试配置中,以使用固定参数实现相同的结果进行测试。

任何帮助将不胜感激!

编辑:为了澄清,我的意思是在命令行上,$(kubectl ...)当命令的结果用引号 () 括起来时,它会作为单个命令行参数传递到 python 程序中"$(kubectl ...)"。所以在python程序中,你可以访问sys.argv[1]并且它将包含$(kubectl get configmap ...). 但是,如果我自己在命令行上执行该命令,结果是一个多行字符串。

如果我随后将结果复制到 PyCharm 中(甚至再次复制到命令行中),它​​会被解释为许多命令行参数。例如,它看起来像这样:

$ python parse_ips.py apiVersion: v1
data:
  item1: ifconfig-push 127.0.0.0 255.255.0.0
  item2: ifconfig-push 127.0.0.1 …
Run Code Online (Sandbox Code Playgroud)

python bash escaping pycharm

0
推荐指数
1
解决办法
279
查看次数

标签 统计

python ×2

bash ×1

escaping ×1

pycharm ×1

threadpoolexecutor ×1

tornado ×1