cobweb-launcher 1.3.1__tar.gz → 1.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cobweb-launcher-1.3.1/cobweb_launcher.egg-info → cobweb-launcher-1.3.2}/PKG-INFO +1 -1
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/launchers/launcher_pro.py +2 -2
- cobweb-launcher-1.3.2/cobweb/schedulers/__init__.py +1 -0
- cobweb-launcher-1.3.2/cobweb/schedulers/scheduler_redis.py +69 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2/cobweb_launcher.egg-info}/PKG-INFO +1 -1
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_launcher.egg-info/SOURCES.txt +2 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/setup.py +1 -1
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/LICENSE +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/README.md +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/base/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/base/basic.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/base/common_queue.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/base/dotting.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/base/item.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/base/log.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/base/request.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/base/response.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/base/seed.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/constant.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/crawlers/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/crawlers/crawler.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/db/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/db/api_db.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/db/redis_db.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/exceptions/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/exceptions/oss_db_exception.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/launchers/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/launchers/launcher.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/launchers/launcher_air.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/launchers/launcher_api.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/pipelines/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/pipelines/pipeline.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/pipelines/pipeline_console.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/pipelines/pipeline_loghub.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/setting.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/utils/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/utils/bloom.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/utils/oss.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb/utils/tools.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/base/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/base/common_queue.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/base/decorators.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/base/item.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/base/log.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/base/request.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/base/response.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/base/seed.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/constant.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/crawlers/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/crawlers/crawler.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/db/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/db/api_db.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/db/redis_db.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/exceptions/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/exceptions/oss_db_exception.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/launchers/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/launchers/launcher.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/launchers/launcher_air.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/launchers/launcher_api.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/launchers/launcher_pro.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/pipelines/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/pipelines/pipeline.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/pipelines/pipeline_console.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/pipelines/pipeline_loghub.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/setting.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/utils/__init__.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/utils/bloom.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/utils/dotting.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/utils/oss.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_/utils/tools.py +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_launcher.egg-info/dependency_links.txt +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_launcher.egg-info/requires.txt +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_launcher.egg-info/top_level.txt +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/setup.cfg +0 -0
- {cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/test/test.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
from .scheduler_redis import RedisScheduler
|
@@ -0,0 +1,69 @@
|
|
1
|
+
import threading
|
2
|
+
import time
|
3
|
+
|
4
|
+
# from cobweb.base import Seed
|
5
|
+
from cobweb.db import RedisDB
|
6
|
+
|
7
|
+
|
8
|
+
class RedisScheduler:
|
9
|
+
|
10
|
+
def __init__(self, task, project, scheduler_wait_seconds=30):
|
11
|
+
self._todo_key = "{%s:%s}:todo" % (project, task)
|
12
|
+
self._download_key = "{%s:%s}:download" % (project, task)
|
13
|
+
self._heartbeat_key = "heartbeat:%s_%s" % (project, task)
|
14
|
+
self._speed_control_key = "speed_control:%s_%s" % (project, task)
|
15
|
+
self._reset_lock_key = "lock:reset:%s_%s" % (project, task)
|
16
|
+
self._db = RedisDB()
|
17
|
+
|
18
|
+
self.scheduler_wait_seconds = scheduler_wait_seconds
|
19
|
+
self.working = threading.Event()
|
20
|
+
|
21
|
+
@property
|
22
|
+
def heartbeat(self):
|
23
|
+
return self._db.exists(self._heartbeat_key)
|
24
|
+
|
25
|
+
def set_heartbeat(self):
|
26
|
+
return self._db.setex(self._heartbeat_key, 5)
|
27
|
+
|
28
|
+
def schedule(self, key, count):
|
29
|
+
if not self._db.zcount(key, 0, "(1000"):
|
30
|
+
time.sleep(self.scheduler_wait_seconds)
|
31
|
+
else:
|
32
|
+
source = int(time.time())
|
33
|
+
members = self._db.members(key, source, count=count, _min=0, _max="(1000")
|
34
|
+
for member, priority in members:
|
35
|
+
# seed = Seed(member, priority=priority)
|
36
|
+
yield member.decode(), priority
|
37
|
+
|
38
|
+
def insert(self, key, items):
|
39
|
+
if items:
|
40
|
+
self._db.zadd(key, items, nx=True)
|
41
|
+
|
42
|
+
def reset(self, keys, reset_time=30):
|
43
|
+
if self._db.lock(self._reset_lock_key, t=120):
|
44
|
+
|
45
|
+
if isinstance(keys, str):
|
46
|
+
keys = [keys]
|
47
|
+
|
48
|
+
_min = reset_time - int(time.time()) if self.heartbeat else "-inf"
|
49
|
+
|
50
|
+
for key in keys:
|
51
|
+
self._db.members(key, 0, _min=_min, _max="(0")
|
52
|
+
|
53
|
+
if not self.heartbeat:
|
54
|
+
self.working.set()
|
55
|
+
time.sleep(10)
|
56
|
+
|
57
|
+
self._db.delete(self._reset_lock_key)
|
58
|
+
|
59
|
+
def refresh(self, key, items: dict[str, int]):
|
60
|
+
refresh_time = int(time.time())
|
61
|
+
its = {k: -refresh_time - v / 1000 for k, v in items}
|
62
|
+
self._db.zadd(key, item=its, xx=True)
|
63
|
+
|
64
|
+
def delete(self, key, values):
|
65
|
+
self._db.zrem(key, *values)
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|
@@ -29,6 +29,8 @@ cobweb/pipelines/__init__.py
|
|
29
29
|
cobweb/pipelines/pipeline.py
|
30
30
|
cobweb/pipelines/pipeline_console.py
|
31
31
|
cobweb/pipelines/pipeline_loghub.py
|
32
|
+
cobweb/schedulers/__init__.py
|
33
|
+
cobweb/schedulers/scheduler_redis.py
|
32
34
|
cobweb/utils/__init__.py
|
33
35
|
cobweb/utils/bloom.py
|
34
36
|
cobweb/utils/oss.py
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{cobweb-launcher-1.3.1 → cobweb-launcher-1.3.2}/cobweb_launcher.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|