问题描述
问题说明
我目前正在构建一个包含三个任务的交换抓取器,每个任务都独立运行process
:
-
#1:接收实时网络馈送:非常快的数据传入,立即放入
multiprocessing
队列并继续。 - #2:使用队列数据并优化:使用我编写的一些逻辑来使用和优化它。慢但不是太慢,最终在数据进入缓慢时赶上并清除队列。
-
#3:使用
bz2
压缩提要并上传到我的 s3 存储桶:每小时,我都会压缩优化的数据(以进一步减小文件大小),然后上传到我的 s3桶。这在我的机器上大约需要 10-20 秒。
我遇到的问题是这些任务中的每一个都需要自己的并行 process
。生产者 (#1) 不能进行优化 (#2),否则它会停止馈送连接并且网站会杀死我的套接字,因为线程 #1 没有响应。上传器 (#3) 不能与任务 #2 在同一进程上运行,否则我会填满队列,我永远赶不上。我试过这个:不起作用。
这个刮刀在我的本地机器上工作得很好,每个任务都有自己的进程。但是我真的不想在一个3核机器上花很多钱,当它部署在服务器上时。我发现 Digital Ocean 的 4vCPU 选项最便宜,每月 40 美元。但我想知道是否有比支付 4 核更好的方法。
需要注意的一些事情:在我的基础 16" MBP 上,任务 #1 使用 99% 的 CPU,任务 #2 使用 20-30% 的 CPU,任务 #3 休眠到小时,所以它主要使用 0.5 -1% CPU。
问题:
-
如果我在一台 2 核机器上运行三个进程,这与运行两个进程是否有效相同?我知道它 depends on system scheduling,但这是否意味着它会在压缩时停止,或者一直移动直到压缩结束?启动(并支付)一个每小时仅使用一次的全新核心似乎真的很浪费。但是这个每小时的任务让整个队列停顿太多,我不知道如何解决这个问题。
-
在我在同一个进程/核心上压缩我的文件时,我是否可以继续任务#2?
-
如果我运行一个 bash 脚本来进行压缩,那仍然会使软件停止吗?我的电脑是 6 核,所以我不能真正在本地测试服务器的约束
-
是否有比 DigitalOcean 更便宜的替代品?老实说,我对 AWS 感到害怕,因为我听说过人们因意外使用而收到 1,000 美元账单的恐怖故事。我更喜欢像 DigitalOcean 这样更可预测的东西
我的尝试
如前所述,我尝试在同一进程中组合 Task#2 和 Task#3。一旦压缩开始,它就会停止。压缩是同步的,并使用 the code from this thread 完成。找不到异步 bz2 压缩,但我不确定这是否有助于不拖延 Task#2。
PS:我真的试图避免带着这样的悬而未决的问题来到 StackOverflow,因为我知道这些问题得到了不好的反馈,但替代方案是尝试并投入大量时间+金钱说实话,我对云计算了解不多。我更喜欢一些专家的意见
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)