不清楚我几个月前说过没,我要搞一个全自动拖a片网站的项目🤔它和现在我常用的方法相比,至少得做到如下自动化改进:
- 它首先需要实现一个数据库系统,并能自动维护所有片子的列表,和其他metadata,而不像我现在搞的寄吧玩意一样,拖站几小时,整理数据两小时(恼
-
和之前手动分配任务的做法不同,它最好能随机地(或者不随机地)将任务分配到github actions机器上处理,并在后者处理完后将生成的discord drive链接和log(如果有的话)归类到数据库的对应字段里
-
它最好能自动新建github actions机器,并让这些机器随机地处理8个线程中的一个,而且在线程分配的时候确定不会同时给一个线程分配一个以上的任务
-
而且它最好能不局限于某一个具体的项目,而是对所有诸如此类的项目,甚至度盘转discord drive,都能提供一个统一的模板,只需要填进去某些项目相关的数据(比如http请求头啊,处理返回数据的方式啊,等等)就vans了(确信
-
如果它能用某种方式将旧数据导入进去的话,那就更棒了(确信
我现在基本打算让这个项目便乘py,毕竟我很难想象它能用bash实现🙃
但现在还有几个细节问题,我还没有确定,比如:
- github actions调度问题,我是每生成一次任务(包含固定数量的链接)就调用一次某申必api(或者压根就没有api,就是github actions网页抓请求)开启一个新的github actions机子?🤔还是我先创建八个github actions机子再说,然后每个机子每秒钟轮询某申必接口一次,如果它返回了任务就执行任务并返回结果(此时任务的粒度可以达到一个链接),返回了standby就standby,返回了terminate就结束轮询(并结束它自身的运行)?🤔
-
无论这两种调度方法中的哪种,如何确保每一个discord drive线程同一时间只能跑一个任务?🤔尤其是对第二种调度方法而言,是限定每个action线程跑对应的固定discord drive线程,还是让它们可以灵活地随时可以跑任意discord drive线程?🤔
-
cosette chan不仅仅为某个特定拖站项目而生,它是一个通用框架🤔那么我们需要把具体拖站任务的哪些部分抽象成定制部分?这部分可以用什么实现?bash?py?🤔这部分里面哪些部分需要在cosette chan上跑?哪些部分需要在github actions上跑?如何将这部分代码从前者传给后者?🤔
-
github actions也许可以通过主动轮询或者被动(比如带着任务列表参数被创建)方式接收任务,但它怎么在执行完任务后将返回的discord drive链接传给cosette chan?🤔还有一个更重要的问题,cosette chan如何感知任务完成的情况?🤔这里插入一个申必异步事件驱动代码,但我不清楚怎么写🤔
-
最后一个问题,cosette chan有什么办法优化任务调度?面对有大有小的任务,它如何确保任务被尽可能均匀分配到8个线程里?🤔
-
有没有可能将其web化,比如做一个web框架,然后能直观地看到当前任务的进度等🤔或者再不济也可以弄一个交互式命令行,类似rtorrent那种🤔
thonksette
我目前能想出来的解决方案大概长这样:
-
主文件cosette.py,用来跑线程调度等主要功能,如果可能的话,它可以开一个小型http server并监听某申必端口,从而接收github actions发来的链接等信息,并对此做出回应
-
cosette.py向github actions发送信息的方式被暂时定为在httproot创建8个申必文件,然后github actions机子不停curl这些文件,如果里面只有standby或者terminate等词便执行相关的命令,否则,将其内容当作bash脚本执行🤔换句话说,cosette.py需要生成一个执行单次任务(比如将一个pornsite链接或者解析完成的度盘链接便乘discord drive链接)的sh脚本🤔所以这个脚本上传到哪个discord drive线程,完全可以由这个脚本来决定🤔
-
分析文件analysette.py,用来对拖站对象进行初步分析,比如获取链接列表、估计每个链接的大小等,并将其扔进数据库
-
用来处理旧款数据的altsette.py,会在上述的数据库基础上将之前生成的链接文件里面的链接归类到数据库的相应位置
-
最后当然是这个项目用到的github action workflow,thonksette.yml了🤔和我之前用的一些workflow脚本相比,这次我打算整点新活,比如用sudo将魔改aria2c等玩意弄到/usr/bin里面去,这样我下次写什么玩意再也不用相对路径了,直接像本机一样用就vans了(确信🤔