一个业务逻辑实现思路想问问大家

2019-09-16 14:37:24 +08:00
 smallgoogle

我当前是使用 queue 单向队列;

我需要实现功能如下:
从数据库拉取数据,然后放入队列,然后多线程进行访问;
线程每次使用 queue.get 获取一条数据访问;结束业务的时候又把数据 put 到队尾;
一直循环;

我另外还有一个线程,一直监听一个接收事件,如果接收到数据,就往队列里插入数据;
那么问题来了,如果我想中间的时候往队列里增加数据 或者 删除数据怎么办? 比如我想删除队列里的某一个数据,好像 queue 不支持从中间删除数据。
我这样的业务逻辑是不是不应该使用队列?

4257 次点击
所在节点    Python
27 条回复
hellotime
2019-09-17 11:07:33 +08:00
多线程好像也取不到同一条记录把。
lazyfighter
2019-09-17 13:59:28 +08:00
你应该说需求,另外这样使用队列,不会 oom 吗
movax21h
2019-09-17 17:09:02 +08:00
应该不需要列队吧?
因为你的多线程其实根本不会对同一个数据进行读写操作。(没有这个业务需求)

简单点,如果有 4 个线程,把从数据库获取的 url,分成四份不就行了吗?
最后处理完成之后,再合一起。

不要打架,好处都有啥。
Zzzz07
2019-09-17 17:47:30 +08:00
我也有个类似的需求,当有新的数据加入时就删除队列,出队时队列为空就重新去数据库中查询添加到队列中
alexzhu592
2019-09-17 22:19:19 +08:00
其实你的需求就是要保证容器的并发安全,同时又增删操作,主要是查询,你就直接用 redis 就可以了
jimrok
2019-09-17 23:02:45 +08:00
感觉是一个做爬虫的小白
jiangbingo
2019-09-19 09:52:10 +08:00
K:V 映射的字典 pop 出 K-url,update V-数据 会有什么问题?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/601172

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX