为了账号安全,请及时绑定邮箱和手机立即绑定

使用docker执行多个python脚本

使用docker执行多个python脚本

largeQ 2023-11-09 22:11:10
我想同时在 Docker 上执行多个 python 脚本。但我发现输出顺序有些奇怪。下面是我的测试 python 脚本。import randomimport timeprint("start test")# sleep timern = random.randint(30, 45)# file numberrn_fn = random.randint(0, 10000000)print("sleep %s seconds ..." % rn)time.sleep(rn)print("write file python_test%s_%s ..." % (rn_fn, rn))txt_file = open('/app/python_test%s_%s.txt' % (rn_fn, rn), 'w')txt_file.write('test %s!' % rn_fn)txt_file.close()print("end write file")当我在 CentOS7 上运行 python 脚本两次时python test.py &python test.py &输出是00:00 - start test(1)00:00 - start test(2)00:00 - sleep 35 seconds ...(1)00:00 - sleep 40 seconds ...(2)00:35 - write file ~.txt(1)00:35 - end write file(1)00:40 - write file ~.txt(2)00:40 - end write file(2)但是当我在 docker 上执行它时docker exec -i container_name /app/test.py &docker exec -i container_name /app/test.py &输出是00:00 - start test(1)00:00 - sleep 35 seconds ...(1)00:35 - write file ~.txt(1)00:35 - end write file(1)00:00 - start test(2)00:00 - sleep 40 seconds ...(2)00:40 - write file ~.txt(2)00:40 - end write file(2)为什么 CentOS 和 docker 中 print() 的顺序不同?docker 进程结束时是否打印?
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

如果您从 Docker 容器运行 Python 脚本,默认情况下它没有 tty,当您要运行容器时,您必须--tty添加-t,

docker run -t yourimage

如果您不希望容器执行此操作,您可以通过在打印方法中添加flush参数来强制Python进行刷新。

print("Begin", flush=True)


查看完整回答
反对 回复 2023-11-09
  • 1 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信