鱼C论坛

 找回密码
 立即注册
查看: 3100|回复: 26

求指点!怎么用python代码开启HTTP server?

[复制链接]
发表于 2021-6-21 20:32:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 曼查克 于 2021-6-25 17:33 编辑

怎么用python代码开启HTTP server?(不要在terminal输指令执行,直接脚本实现的那种!!!)
想要接收请求,处理数据,用哪些工具比较好?


20210623
现在用的是flask的app.run开启的服务,适合用于开发不适合生产。
我的需求是几十台客户端同时请求,但是数据比较多,而且都是通过同一个路由处理的。
为了避免堵住,希望处理数据的部分由子线程来做。
不知道怎么实现?

希望利用现成的框架来实现。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-21 20:44:32 From FishC Mobile | 显示全部楼层
做bs吗,python可以配合flask
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-22 09:19:03 | 显示全部楼层
看你要什么类型的啊,自己创建一个http框架, 运行就是一个HTTP了, 如果是要运行别人的另外看代码,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 09:21:56 | 显示全部楼层
z5560636 发表于 2021-6-22 09:19
看你要什么类型的啊,自己创建一个http框架, 运行就是一个HTTP了, 如果是要运行别人的另外看代码,

需求是这样的:
开启HTTP服务,接收客户端发送的json信息,处理。
最好支持多线程。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 09:24:11 | 显示全部楼层
wp231957 发表于 2021-6-21 20:44
做bs吗,python可以配合flask

就简单做个server,处理客户端发送的信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-22 09:44:20 From FishC Mobile | 显示全部楼层
曼查克 发表于 2021-6-22 09:24
就简单做个server,处理客户端发送的信息。

小型服务器python+flask
或者nodejs
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 18:54:00 | 显示全部楼层
wp231957 发表于 2021-6-22 09:44
小型服务器python+flask
或者nodejs

谢谢,flask了解了,但是好像只能开启开发测试服务,能不能开更适合生产使用的,可分配线程的服务呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-22 18:55:35 From FishC Mobile | 显示全部楼层
曼查克 发表于 2021-6-22 18:54
谢谢,flask了解了,但是好像只能开启开发测试服务,能不能开更适合生产使用的,可分配线程的服务呢?

如果是单位几十台局域网用的话,flask也是可以的,至于你说的多线程是啥意思呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 19:00:06 | 显示全部楼层
wp231957 发表于 2021-6-22 18:55
如果是单位几十台局域网用的话,flask也是可以的,至于你说的多线程是啥意思呢

几十台够了;多线程的意思是,每个客户端都会发送不少数据,然后服务端来处理,接收一个处理一个的话会有问题吧?所以考虑接收到数据后处理的部分交给子线程做。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-22 19:02:46 From FishC Mobile | 显示全部楼层
曼查克 发表于 2021-6-22 19:00
几十台够了;多线程的意思是,每个客户端都会发送不少数据,然后服务端来处理,接收一个处理一个的话会有 ...

你方便描述一下你的具体业务吗,是否涉及数据库
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 19:04:32 | 显示全部楼层
wp231957 发表于 2021-6-22 19:02
你方便描述一下你的具体业务吗,是否涉及数据库

不涉及数据库。客户端发送json文件,内容是图片编码。服务端同时接收多台客户端发送的json处理并保存。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-22 19:28:40 From FishC Mobile | 显示全部楼层
曼查克 发表于 2021-6-22 19:04
不涉及数据库。客户端发送json文件,内容是图片编码。服务端同时接收多台客户端发送的json处理并保存。

我没做过这方面的东西,没有话语权
不过我搜了一下,flask也能处理高并发,多线程的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-22 22:33:06 | 显示全部楼层
我有现成的代码你要吗,socket 原生的服务器,我可以把框架代码给你。你自己写功能。前提是你得懂http协议。(我自己写的框架)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-23 09:08:16 | 显示全部楼层
nahongyan1997 发表于 2021-6-22 22:33
我有现成的代码你要吗,socket 原生的服务器,我可以把框架代码给你。你自己写功能。前提是你得懂http协议 ...

方便嘛,才初步接触web,对http有简单了解,有机会学习一下也好~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-23 09:22:17 | 显示全部楼层
曼查克 发表于 2021-6-23 09:08
方便嘛,才初步接触web,对http有简单了解,有机会学习一下也好~

  你搞复杂了,   http 服务器都是多线程的,  并不是你一个页面访问,就把后端挂死在函数里面了。  如果你对数据并发有很高的要求,可是试试 python FastAPI 框架,每秒1W条数据,还是轻轻松松的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-23 09:47:01 | 显示全部楼层
曼查克 发表于 2021-6-23 09:08
方便嘛,才初步接触web,对http有简单了解,有机会学习一下也好~

global_control.py
  1. from time import sleep
  2. from time import localtime
  3. from subprocess import STARTUPINFO,CREATE_NEW_CONSOLE,STARTF_USESHOWWINDOW,SW_HIDE
  4. from file_process import File

  5. down_speed_list = {}
  6. up_speed_list = {}

  7. transmitting = []
  8. request_method = {}

  9. input_check = False           # 子线程占用输入框检查
  10. global_input_content = None   # 子线程获取到的数据

  11. first_sign = 0                # 首次开启标记
  12. cloud_pid = None              # 主线程pid
  13. process_pids = []             # 所有开启的进程的pid
  14. base_dir = None               # 程序根目录
  15. time = None                   # 当前时间(使用time.localtime获取)

  16. file_open_return = None

  17. ai_message = None             # 向主窗口发送的信息
  18. main_window = None            # 主窗口状态

  19. break_program = False         # 全部中断检测
  20. break_program_number = []     # 要打断的程序

  21. PROGRESS_BAR = {'RedProgressBar': "QProgressBar  {   border: 1px solid white; border-radius: 2px;} QProgressBar::chunk {background-color: #ff0000;}",
  22.                 'YellowProgressBar': "QProgressBar {  border: 1px solid white; border-radius: 2px;} QProgressBar::chunk {background-color: #F4ECA3;}",
  23.                 'GreenProgressBar': "QProgressBar {  border: 1px solid white; border-radius: 2px;} QProgressBar::chunk {background-color: #009688;}"}



  24. response_status = {'200':'HTTP/1.1 200 OK',
  25.                    '201':'HTTP/1.1 201 Created',
  26.                    '206':'HTTP/1.1 206 Partial Content',
  27.                    '404':'HTTP/1.1 404 Page Not Found',
  28.                    '403':'HTTP/1.1 403 Forbidden'}

  29. CONTENT_TYPE = {
  30. '.load': 'text/html',
  31. '.123': 'application/vnd.lotus-1-2-3',
  32. '.3ds': 'image/x-3ds',
  33. '.3g2': 'video/3gpp',
  34. '.3ga': 'video/3gpp',
  35. '.3gp': 'video/3gpp',
  36. '.3gpp': 'video/3gpp',
  37. '.602': 'application/x-t602',
  38. '.669': 'audio/x-mod',
  39. '.7z': 'application/x-7z-compressed',
  40. '.a': 'application/x-archive',
  41. '.aac': 'audio/mp4',
  42. '.abw': 'application/x-abiword',
  43. '.abw.crashed': 'application/x-abiword',
  44. '.abw.gz': 'application/x-abiword',
  45. '.ac3': 'audio/ac3',
  46. '.ace': 'application/x-ace',
  47. '.adb': 'text/x-adasrc',
  48. '.ads': 'text/x-adasrc',
  49. '.afm': 'application/x-font-afm',
  50. '.ag': 'image/x-applix-graphics',
  51. '.ai': 'application/illustrator',
  52. '.aif': 'audio/x-aiff',
  53. '.aifc': 'audio/x-aiff',
  54. '.aiff': 'audio/x-aiff',
  55. '.al': 'application/x-perl',
  56. '.alz': 'application/x-alz',
  57. '.amr': 'audio/amr',
  58. '.ani': 'application/x-navi-animation',
  59. '.anim[1-9j]': 'video/x-anim',
  60. '.anx': 'application/annodex',
  61. '.ape': 'audio/x-ape',
  62. '.arj': 'application/x-arj',
  63. '.arw': 'image/x-sony-arw',
  64. '.as': 'application/x-applix-spreadsheet',
  65. '.asc': 'text/plain',
  66. '.asf': 'video/x-ms-asf',
  67. '.asp': 'application/x-asp',
  68. '.ass': 'text/x-ssa',
  69. '.asx': 'audio/x-ms-asx',
  70. '.atom': 'application/atom+xml',
  71. '.au': 'audio/basic',
  72. '.avi': 'video/x-msvideo',
  73. '.aw': 'application/x-applix-word',
  74. '.awb': 'audio/amr-wb',
  75. '.awk': 'application/x-awk',
  76. '.axa': 'audio/annodex',
  77. '.axv': 'video/annodex',
  78. '.bak': 'application/x-trash',
  79. '.bcpio': 'application/x-bcpio',
  80. '.bdf': 'application/x-font-bdf',
  81. '.bib': 'text/x-bibtex',
  82. '.bin': 'application/octet-stream',
  83. '.blend': 'application/x-blender',
  84. '.blender': 'application/x-blender',
  85. '.bmp': 'image/bmp',
  86. '.bz': 'application/x-bzip',
  87. '.bz2': 'application/x-bzip',
  88. '.c': 'text/x-csrc',
  89. '.c++': 'text/x-c++src',
  90. '.cab': 'application/vnd.ms-cab-compressed',
  91. '.cb7': 'application/x-cb7',
  92. '.cbr': 'application/x-cbr',
  93. '.cbt': 'application/x-cbt',
  94. '.cbz': 'application/x-cbz',
  95. '.cc': 'text/x-c++src',
  96. '.cdf': 'application/x-netcdf',
  97. '.cdr': 'application/vnd.corel-draw',
  98. '.cer': 'application/x-x509-ca-cert',
  99. '.cert': 'application/x-x509-ca-cert',
  100. '.cgm': 'image/cgm',
  101. '.chm': 'application/x-chm',
  102. '.chrt': 'application/x-kchart',
  103. '.class': 'application/x-java',
  104. '.cls': 'text/x-tex',
  105. '.cmake': 'text/x-cmake',
  106. '.cpio': 'application/x-cpio',
  107. '.cpio.gz': 'application/x-cpio-compressed',
  108. '.cpp': 'text/x-c++src',
  109. '.cr2': 'image/x-canon-cr2',
  110. '.crt': 'application/x-x509-ca-cert',
  111. '.crw': 'image/x-canon-crw',
  112. '.cs': 'text/x-csharp',
  113. '.csh': 'application/x-csh',
  114. '.css': 'text/css',
  115. '.cssl': 'text/css',
  116. '.csv': 'text/csv',
  117. '.cue': 'application/x-cue',
  118. '.cur': 'image/x-win-bitmap',
  119. '.cxx': 'text/x-c++src',
  120. '.d': 'text/x-dsrc',
  121. '.dar': 'application/x-dar',
  122. '.dbf': 'application/x-dbf',
  123. '.dc': 'application/x-dc-rom',
  124. '.dcl': 'text/x-dcl',
  125. '.dcm': 'application/dicom',
  126. '.dcr': 'image/x-kodak-dcr',
  127. '.dds': 'image/x-dds',
  128. '.deb': 'application/x-deb',
  129. '.der': 'application/x-x509-ca-cert',
  130. '.desktop': 'application/x-desktop',
  131. '.dia': 'application/x-dia-diagram',
  132. '.diff': 'text/x-patch',
  133. '.divx': 'video/x-msvideo',
  134. '.djv': 'image/vnd.djvu',
  135. '.djvu': 'image/vnd.djvu',
  136. '.dng': 'image/x-adobe-dng',
  137. '.doc': 'application/msword',
  138. '.docbook': 'application/docbook+xml',
  139. '.docm': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
  140. '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
  141. '.dot': 'text/vnd.graphviz',
  142. '.dsl': 'text/x-dsl',
  143. '.dtd': 'application/xml-dtd',
  144. '.dtx': 'text/x-tex',
  145. '.dv': 'video/dv',
  146. '.dvi': 'application/x-dvi',
  147. '.dvi.bz2': 'application/x-bzdvi',
  148. '.dvi.gz': 'application/x-gzdvi',
  149. '.dwg': 'image/vnd.dwg',
  150. '.dxf': 'image/vnd.dxf',
  151. '.e': 'text/x-eiffel',
  152. '.egon': 'application/x-egon',
  153. '.eif': 'text/x-eiffel',
  154. '.el': 'text/x-emacs-lisp',
  155. '.emf': 'image/x-emf',
  156. '.emp': 'application/vnd.emusic-emusic_package',
  157. '.ent': 'application/xml-external-parsed-entity',
  158. '.eps': 'image/x-eps',
  159. '.eps.bz2': 'image/x-bzeps',
  160. '.eps.gz': 'image/x-gzeps',
  161. '.epsf': 'image/x-eps',
  162. '.epsf.bz2': 'image/x-bzeps',
  163. '.epsf.gz': 'image/x-gzeps',
  164. '.epsi': 'image/x-eps',
  165. '.epsi.bz2': 'image/x-bzeps',
  166. '.epsi.gz': 'image/x-gzeps',
  167. '.epub': 'application/epub+zip',
  168. '.erl': 'text/x-erlang',
  169. '.es': 'application/ecmascript',
  170. '.etheme': 'application/x-e-theme',
  171. '.etx': 'text/x-setext',
  172. '.exe': 'application/x-ms-dos-executable',
  173. '.exr': 'image/x-exr',
  174. '.ez': 'application/andrew-inset',
  175. '.f': 'text/x-fortran',
  176. '.f90': 'text/x-fortran',
  177. '.f95': 'text/x-fortran',
  178. '.fb2': 'application/x-fictionbook+xml',
  179. '.fig': 'image/x-xfig',
  180. '.fits': 'image/fits',
  181. '.fl': 'application/x-fluid',
  182. '.flac': 'audio/x-flac',
  183. '.flc': 'video/x-flic',
  184. '.fli': 'video/x-flic',
  185. '.flv': 'video/x-flv',
  186. '.flw': 'application/x-kivio',
  187. '.fo': 'text/x-xslfo',
  188. '.for': 'text/x-fortran',
  189. '.g3': 'image/fax-g3',
  190. '.gb': 'application/x-gameboy-rom',
  191. '.gba': 'application/x-gba-rom',
  192. '.gcrd': 'text/directory',
  193. '.ged': 'application/x-gedcom',
  194. '.gedcom': 'application/x-gedcom',
  195. '.gen': 'application/x-genesis-rom',
  196. '.gf': 'application/x-tex-gf',
  197. '.gg': 'application/x-sms-rom',
  198. '.gif': 'image/gif',
  199. '.glade': 'application/x-glade',
  200. '.gmo': 'application/x-gettext-translation',
  201. '.gnc': 'application/x-gnucash',
  202. '.gnd': 'application/gnunet-directory',
  203. '.gnucash': 'application/x-gnucash',
  204. '.gnumeric': 'application/x-gnumeric',
  205. '.gnuplot': 'application/x-gnuplot',
  206. '.gp': 'application/x-gnuplot',
  207. '.gpg': 'application/pgp-encrypted',
  208. '.gplt': 'application/x-gnuplot',
  209. '.gra': 'application/x-graphite',
  210. '.gsf': 'application/x-font-type1',
  211. '.gsm': 'audio/x-gsm',
  212. '.gtar': 'application/x-tar',
  213. '.gv': 'text/vnd.graphviz',
  214. '.gvp': 'text/x-google-video-pointer',
  215. '.gz': 'application/x-gzip',
  216. '.h': 'text/x-chdr',
  217. '.h++': 'text/x-c++hdr',
  218. '.hdf': 'application/x-hdf',
  219. '.hh': 'text/x-c++hdr',
  220. '.hp': 'text/x-c++hdr',
  221. '.hpgl': 'application/vnd.hp-hpgl',
  222. '.hpp': 'text/x-c++hdr',
  223. '.hs': 'text/x-haskell',
  224. '.htm': 'text/html',
  225. '.html': 'text/html',
  226. '.hwp': 'application/x-hwp',
  227. '.hwt': 'application/x-hwt',
  228. '.hxx': 'text/x-c++hdr',
  229. '.ica': 'application/x-ica',
  230. '.icb': 'image/x-tga',
  231. '.icns': 'image/x-icns',
  232. '.ico': 'image/vnd.microsoft.icon',
  233. '.ics': 'text/calendar',
  234. '.idl': 'text/x-idl',
  235. '.ief': 'image/ief',
  236. '.iff': 'image/x-iff',
  237. '.ilbm': 'image/x-ilbm',
  238. '.ime': 'text/x-imelody',
  239. '.imy': 'text/x-imelody',
  240. '.ins': 'text/x-tex',
  241. '.iptables': 'text/x-iptables',
  242. '.iso': 'application/x-cd-image',
  243. '.iso9660': 'application/x-cd-image',
  244. '.it': 'audio/x-it',
  245. '.j2k': 'image/jp2',
  246. '.jad': 'text/vnd.sun.j2me.app-descriptor',
  247. '.jar': 'application/x-java-archive',
  248. '.java': 'text/x-java',
  249. '.jng': 'image/x-jng',
  250. '.jnlp': 'application/x-java-jnlp-file',
  251. '.jp2': 'image/jp2',
  252. '.jpc': 'image/jp2',
  253. '.jpe': 'image/jpeg',
  254. '.jpeg': 'image/jpeg',
  255. '.jpf': 'image/jp2',
  256. '.jpg': 'image/jpeg',
  257. '.jpr': 'application/x-jbuilder-project',
  258. '.jpx': 'image/jp2',
  259. '.js': 'application/javascript',
  260. '.json': 'application/json',
  261. '.jsonp': 'application/jsonp',
  262. '.k25': 'image/x-kodak-k25',
  263. '.kar': 'audio/midi',
  264. '.karbon': 'application/x-karbon',
  265. '.kdc': 'image/x-kodak-kdc',
  266. '.kdelnk': 'application/x-desktop',
  267. '.kexi': 'application/x-kexiproject-sqlite3',
  268. '.kexic': 'application/x-kexi-connectiondata',
  269. '.kexis': 'application/x-kexiproject-shortcut',
  270. '.kfo': 'application/x-kformula',
  271. '.kil': 'application/x-killustrator',
  272. '.kino': 'application/smil',
  273. '.kml': 'application/vnd.google-earth.kml+xml',
  274. '.kmz': 'application/vnd.google-earth.kmz',
  275. '.kon': 'application/x-kontour',
  276. '.kpm': 'application/x-kpovmodeler',
  277. '.kpr': 'application/x-kpresenter',
  278. '.kpt': 'application/x-kpresenter',
  279. '.kra': 'application/x-krita',
  280. '.ksp': 'application/x-kspread',
  281. '.kud': 'application/x-kugar',
  282. '.kwd': 'application/x-kword',
  283. '.kwt': 'application/x-kword',
  284. '.la': 'application/x-shared-library-la',
  285. '.latex': 'text/x-tex',
  286. '.ldif': 'text/x-ldif',
  287. '.lha': 'application/x-lha',
  288. '.lhs': 'text/x-literate-haskell',
  289. '.lhz': 'application/x-lhz',
  290. '.log': 'text/x-log',
  291. '.ltx': 'text/x-tex',
  292. '.lua': 'text/x-lua',
  293. '.lwo': 'image/x-lwo',
  294. '.lwob': 'image/x-lwo',
  295. '.lws': 'image/x-lws',
  296. '.ly': 'text/x-lilypond',
  297. '.lyx': 'application/x-lyx',
  298. '.lz': 'application/x-lzip',
  299. '.lzh': 'application/x-lha',
  300. '.lzma': 'application/x-lzma',
  301. '.lzo': 'application/x-lzop',
  302. '.m': 'text/x-matlab',
  303. '.m15': 'audio/x-mod',
  304. '.m2t': 'video/mpeg',
  305. '.m3u': 'audio/x-mpegurl',
  306. '.m3u8': 'application/x-mpegurl',
  307. '.m4': 'application/x-m4',
  308. '.m4a': 'audio/mp4',
  309. '.m4b': 'audio/x-m4b',
  310. '.m4v': 'video/mp4',
  311. '.mab': 'application/x-markaby',
  312. '.man': 'application/x-troff-man',
  313. '.mbox': 'application/mbox',
  314. '.md': 'application/x-genesis-rom',
  315. '.mdb': 'application/vnd.ms-access',
  316. '.mdi': 'image/vnd.ms-modi',
  317. '.me': 'text/x-troff-me',
  318. '.med': 'audio/x-mod',
  319. '.metalink': 'application/metalink+xml',
  320. '.mgp': 'application/x-magicpoint',
  321. '.mid': 'audio/midi',
  322. '.midi': 'audio/midi',
  323. '.mif': 'application/x-mif',
  324. '.minipsf': 'audio/x-minipsf',
  325. '.mka': 'audio/x-matroska',
  326. '.mkv': 'video/x-matroska',
  327. '.ml': 'text/x-ocaml',
  328. '.mli': 'text/x-ocaml',
  329. '.mm': 'text/x-troff-mm',
  330. '.mmf': 'application/x-smaf',
  331. '.mml': 'text/mathml',
  332. '.mng': 'video/x-mng',
  333. '.mo': 'application/x-gettext-translation',
  334. '.mo3': 'audio/x-mo3',
  335. '.moc': 'text/x-moc',
  336. '.mod': 'audio/x-mod',
  337. '.mof': 'text/x-mof',
  338. '.moov': 'video/quicktime',
  339. '.mov': 'video/quicktime',
  340. '.movie': 'video/x-sgi-movie',
  341. '.mp+': 'audio/x-musepack',
  342. '.mp2': 'video/mpeg',
  343. '.mp3': 'audio/mpeg',
  344. '.mp4': 'video/mp4',
  345. '.mpc': 'audio/x-musepack',
  346. '.mpe': 'video/mpeg',
  347. '.mpeg': 'video/mpeg',
  348. '.mpg': 'video/mpeg',
  349. '.mpga': 'audio/mpeg',
  350. '.mpp': 'audio/x-musepack',
  351. '.mrl': 'text/x-mrml',
  352. '.mrml': 'text/x-mrml',
  353. '.mrw': 'image/x-minolta-mrw',
  354. '.ms': 'text/x-troff-ms',
  355. '.msi': 'application/x-msi',
  356. '.msod': 'image/x-msod',
  357. '.msx': 'application/x-msx-rom',
  358. '.mtm': 'audio/x-mod',
  359. '.mup': 'text/x-mup',
  360. '.mxf': 'application/mxf',
  361. '.n64': 'application/x-n64-rom',
  362. '.nb': 'application/mathematica',
  363. '.nc': 'application/x-netcdf',
  364. '.nds': 'application/x-nintendo-ds-rom',
  365. '.nef': 'image/x-nikon-nef',
  366. '.nes': 'application/x-nes-rom',
  367. '.nfo': 'text/x-nfo',
  368. '.not': 'text/x-mup',
  369. '.nsc': 'application/x-netshow-channel',
  370. '.nsv': 'video/x-nsv',
  371. '.o': 'application/x-object',
  372. '.obj': 'application/x-tgif',
  373. '.ocl': 'text/x-ocl',
  374. '.oda': 'application/oda',
  375. '.odb': 'application/vnd.oasis.opendocument.database',
  376. '.odc': 'application/vnd.oasis.opendocument.chart',
  377. '.odf': 'application/vnd.oasis.opendocument.formula',
  378. '.odg': 'application/vnd.oasis.opendocument.graphics',
  379. '.odi': 'application/vnd.oasis.opendocument.image',
  380. '.odm': 'application/vnd.oasis.opendocument.text-master',
  381. '.odp': 'application/vnd.oasis.opendocument.presentation',
  382. '.ods': 'application/vnd.oasis.opendocument.spreadsheet',
  383. '.odt': 'application/vnd.oasis.opendocument.text',
  384. '.oga': 'audio/ogg',
  385. '.ogg': 'video/x-theora+ogg',
  386. '.ogm': 'video/x-ogm+ogg',
  387. '.ogv': 'video/ogg',
  388. '.ogx': 'application/ogg',
  389. '.old': 'application/x-trash',
  390. '.oleo': 'application/x-oleo',
  391. '.opml': 'text/x-opml+xml',
  392. '.ora': 'image/openraster',
  393. '.orf': 'image/x-olympus-orf',
  394. '.otc': 'application/vnd.oasis.opendocument.chart-template',
  395. '.otf': 'application/x-font-otf',
  396. '.otg': 'application/vnd.oasis.opendocument.graphics-template',
  397. '.oth': 'application/vnd.oasis.opendocument.text-web',
  398. '.otp': 'application/vnd.oasis.opendocument.presentation-template',
  399. '.ots': 'application/vnd.oasis.opendocument.spreadsheet-template',
  400. '.ott': 'application/vnd.oasis.opendocument.text-template',
  401. '.owl': 'application/rdf+xml',
  402. '.oxt': 'application/vnd.openofficeorg.extension',
  403. '.p': 'text/x-pascal',
  404. '.p10': 'application/pkcs10',
  405. '.p12': 'application/x-pkcs12',
  406. '.p7b': 'application/x-pkcs7-certificates',
  407. '.p7s': 'application/pkcs7-signature',
  408. '.pack': 'application/x-java-pack200',
  409. '.pak': 'application/x-pak',
  410. '.par2': 'application/x-par2',
  411. '.pas': 'text/x-pascal',
  412. '.patch': 'text/x-patch',
  413. '.pbm': 'image/x-portable-bitmap',
  414. '.pcd': 'image/x-photo-cd',
  415. '.pcf': 'application/x-cisco-vpn-settings',
  416. '.pcf.gz': 'application/x-font-pcf',
  417. '.pcf.z': 'application/x-font-pcf',
  418. '.pcl': 'application/vnd.hp-pcl',
  419. '.pcx': 'image/x-pcx',
  420. '.pdb': 'chemical/x-pdb',
  421. '.pdc': 'application/x-aportisdoc',
  422. '.pdf': 'application/pdf',
  423. '.pdf.bz2': 'application/x-bzpdf',
  424. '.pdf.gz': 'application/x-gzpdf',
  425. '.pef': 'image/x-pentax-pef',
  426. '.pem': 'application/x-x509-ca-cert',
  427. '.perl': 'application/x-perl',
  428. '.pfa': 'application/x-font-type1',
  429. '.pfb': 'application/x-font-type1',
  430. '.pfx': 'application/x-pkcs12',
  431. '.pgm': 'image/x-portable-graymap',
  432. '.pgn': 'application/x-chess-pgn',
  433. '.pgp': 'application/pgp-encrypted',
  434. '.php': 'application/x-php',
  435. '.php3': 'application/x-php',
  436. '.php4': 'application/x-php',
  437. '.pict': 'image/x-pict',
  438. '.pict1': 'image/x-pict',
  439. '.pict2': 'image/x-pict',
  440. '.pickle': 'application/python-pickle',
  441. '.pk': 'application/x-tex-pk',
  442. '.pkipath': 'application/pkix-pkipath',
  443. '.pkr': 'application/pgp-keys',
  444. '.pl': 'application/x-perl',
  445. '.pla': 'audio/x-iriver-pla',
  446. '.pln': 'application/x-planperfect',
  447. '.pls': 'audio/x-scpls',
  448. '.pm': 'application/x-perl',
  449. '.png': 'image/png',
  450. '.pnm': 'image/x-portable-anymap',
  451. '.pntg': 'image/x-macpaint',
  452. '.po': 'text/x-gettext-translation',
  453. '.por': 'application/x-spss-por',
  454. '.pot': 'text/x-gettext-translation-template',
  455. '.ppm': 'image/x-portable-pixmap',
  456. '.pps': 'application/vnd.ms-powerpoint',
  457. '.ppt': 'application/vnd.ms-powerpoint',
  458. '.pptm': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
  459. '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
  460. '.ppz': 'application/vnd.ms-powerpoint',
  461. '.prc': 'application/x-palm-database',
  462. '.ps': 'application/postscript',
  463. '.ps.bz2': 'application/x-bzpostscript',
  464. '.ps.gz': 'application/x-gzpostscript',
  465. '.psd': 'image/vnd.adobe.photoshop',
  466. '.psf': 'audio/x-psf',
  467. '.psf.gz': 'application/x-gz-font-linux-psf',
  468. '.psflib': 'audio/x-psflib',
  469. '.psid': 'audio/prs.sid',
  470. '.psw': 'application/x-pocket-word',
  471. '.pw': 'application/x-pw',
  472. '.py': 'text/x-python',
  473. '.pyc': 'application/x-python-bytecode',
  474. '.pyo': 'application/x-python-bytecode',
  475. '.qif': 'image/x-quicktime',
  476. '.qt': 'video/quicktime',
  477. '.qtif': 'image/x-quicktime',
  478. '.qtl': 'application/x-quicktime-media-link',
  479. '.qtvr': 'video/quicktime',
  480. '.ra': 'audio/vnd.rn-realaudio',
  481. '.raf': 'image/x-fuji-raf',
  482. '.ram': 'application/ram',
  483. '.rar': 'application/x-rar',
  484. '.ras': 'image/x-cmu-raster',
  485. '.raw': 'image/x-panasonic-raw',
  486. '.rax': 'audio/vnd.rn-realaudio',
  487. '.rb': 'application/x-ruby',
  488. '.rdf': 'application/rdf+xml',
  489. '.rdfs': 'application/rdf+xml',
  490. '.reg': 'text/x-ms-regedit',
  491. '.rej': 'application/x-reject',
  492. '.rgb': 'image/x-rgb',
  493. '.rle': 'image/rle',
  494. '.rm': 'application/vnd.rn-realmedia',
  495. '.rmj': 'application/vnd.rn-realmedia',
  496. '.rmm': 'application/vnd.rn-realmedia',
  497. '.rms': 'application/vnd.rn-realmedia',
  498. '.rmvb': 'application/vnd.rn-realmedia',
  499. '.rmx': 'application/vnd.rn-realmedia',
  500. '.roff': 'text/troff',
  501. '.rp': 'image/vnd.rn-realpix',
  502. '.rpm': 'application/x-rpm',
  503. '.rss': 'application/rss+xml',
  504. '.rt': 'text/vnd.rn-realtext',
  505. '.rtf': 'application/rtf',
  506. '.rtx': 'text/richtext',
  507. '.rv': 'video/vnd.rn-realvideo',
  508. '.rvx': 'video/vnd.rn-realvideo',
  509. '.s3m': 'audio/x-s3m',
  510. '.sam': 'application/x-amipro',
  511. '.sami': 'application/x-sami',
  512. '.sav': 'application/x-spss-sav',
  513. '.scm': 'text/x-scheme',
  514. '.sda': 'application/vnd.stardivision.draw',
  515. '.sdc': 'application/vnd.stardivision.calc',
  516. '.sdd': 'application/vnd.stardivision.impress',
  517. '.sdp': 'application/sdp',
  518. '.sds': 'application/vnd.stardivision.chart',
  519. '.sdw': 'application/vnd.stardivision.writer',
  520. '.sgf': 'application/x-go-sgf',
  521. '.sgi': 'image/x-sgi',
  522. '.sgl': 'application/vnd.stardivision.writer',
  523. '.sgm': 'text/sgml',
  524. '.sgml': 'text/sgml',
  525. '.sh': 'application/x-shellscript',
  526. '.shar': 'application/x-shar',
  527. '.shn': 'application/x-shorten',
  528. '.siag': 'application/x-siag',
  529. '.sid': 'audio/prs.sid',
  530. '.sik': 'application/x-trash',
  531. '.sis': 'application/vnd.symbian.install',
  532. '.sisx': 'x-epoc/x-sisx-app',
  533. '.sit': 'application/x-stuffit',
  534. '.siv': 'application/sieve',
  535. '.sk': 'image/x-skencil',
  536. '.sk1': 'image/x-skencil',
  537. '.skr': 'application/pgp-keys',
  538. '.slk': 'text/spreadsheet',
  539. '.smaf': 'application/x-smaf',
  540. '.smc': 'application/x-snes-rom',
  541. '.smd': 'application/vnd.stardivision.mail',
  542. '.smf': 'application/vnd.stardivision.math',
  543. '.smi': 'application/x-sami',
  544. '.smil': 'application/smil',
  545. '.sml': 'application/smil',
  546. '.sms': 'application/x-sms-rom',
  547. '.snd': 'audio/basic',
  548. '.so': 'application/x-sharedlib',
  549. '.spc': 'application/x-pkcs7-certificates',
  550. '.spd': 'application/x-font-speedo',
  551. '.spec': 'text/x-rpm-spec',
  552. '.spl': 'application/x-shockwave-flash',
  553. '.spx': 'audio/x-speex',
  554. '.sql': 'text/x-sql',
  555. '.sr2': 'image/x-sony-sr2',
  556. '.src': 'application/x-wais-source',
  557. '.srf': 'image/x-sony-srf',
  558. '.srt': 'application/x-subrip',
  559. '.ssa': 'text/x-ssa',
  560. '.stc': 'application/vnd.sun.xml.calc.template',
  561. '.std': 'application/vnd.sun.xml.draw.template',
  562. '.sti': 'application/vnd.sun.xml.impress.template',
  563. '.stm': 'audio/x-stm',
  564. '.stw': 'application/vnd.sun.xml.writer.template',
  565. '.sty': 'text/x-tex',
  566. '.sub': 'text/x-subviewer',
  567. '.sun': 'image/x-sun-raster',
  568. '.sv4cpio': 'application/x-sv4cpio',
  569. '.sv4crc': 'application/x-sv4crc',
  570. '.svg': 'image/svg+xml',
  571. '.svgz': 'image/svg+xml-compressed',
  572. '.swf': 'application/x-shockwave-flash',
  573. '.sxc': 'application/vnd.sun.xml.calc',
  574. '.sxd': 'application/vnd.sun.xml.draw',
  575. '.sxg': 'application/vnd.sun.xml.writer.global',
  576. '.sxi': 'application/vnd.sun.xml.impress',
  577. '.sxm': 'application/vnd.sun.xml.math',
  578. '.sxw': 'application/vnd.sun.xml.writer',
  579. '.sylk': 'text/spreadsheet',
  580. '.t': 'text/troff',
  581. '.t2t': 'text/x-txt2tags',
  582. '.tar': 'application/x-tar',
  583. '.tar.bz': 'application/x-bzip-compressed-tar',
  584. '.tar.bz2': 'application/x-bzip-compressed-tar',
  585. '.tar.gz': 'application/x-compressed-tar',
  586. '.tar.lzma': 'application/x-lzma-compressed-tar',
  587. '.tar.lzo': 'application/x-tzo',
  588. '.tar.xz': 'application/x-xz-compressed-tar',
  589. '.tar.z': 'application/x-tarz',
  590. '.tbz': 'application/x-bzip-compressed-tar',
  591. '.tbz2': 'application/x-bzip-compressed-tar',
  592. '.tcl': 'text/x-tcl',
  593. '.tex': 'text/x-tex',
  594. '.texi': 'text/x-texinfo',
  595. '.texinfo': 'text/x-texinfo',
  596. '.tga': 'image/x-tga',
  597. '.tgz': 'application/x-compressed-tar',
  598. '.theme': 'application/x-theme',
  599. '.themepack': 'application/x-windows-themepack',
  600. '.tif': 'image/tiff',
  601. '.tiff': 'image/tiff',
  602. '.tk': 'text/x-tcl',
  603. '.tlz': 'application/x-lzma-compressed-tar',
  604. '.tnef': 'application/vnd.ms-tnef',
  605. '.tnf': 'application/vnd.ms-tnef',
  606. '.toc': 'application/x-cdrdao-toc',
  607. '.torrent': 'application/x-bittorrent',
  608. '.tpic': 'image/x-tga',
  609. '.tr': 'text/troff',
  610. '.ts': 'application/x-linguist',
  611. '.tsv': 'text/tab-separated-values',
  612. '.tta': 'audio/x-tta',
  613. '.ttc': 'application/x-font-ttf',
  614. '.ttf': 'application/x-font-ttf',
  615. '.ttx': 'application/x-font-ttx',
  616. '.txt': 'text/plain',
  617. '.txz': 'application/x-xz-compressed-tar',
  618. '.tzo': 'application/x-tzo',
  619. '.ufraw': 'application/x-ufraw',
  620. '.ui': 'application/x-designer',
  621. '.uil': 'text/x-uil',
  622. '.ult': 'audio/x-mod',
  623. '.uni': 'audio/x-mod',
  624. '.uri': 'text/x-uri',
  625. '.url': 'text/x-uri',
  626. '.ustar': 'application/x-ustar',
  627. '.vala': 'text/x-vala',
  628. '.vapi': 'text/x-vala',
  629. '.vcf': 'text/directory',
  630. '.vcs': 'text/calendar',
  631. '.vct': 'text/directory',
  632. '.vda': 'image/x-tga',
  633. '.vhd': 'text/x-vhdl',
  634. '.vhdl': 'text/x-vhdl',
  635. '.viv': 'video/vivo',
  636. '.vivo': 'video/vivo',
  637. '.vlc': 'audio/x-mpegurl',
  638. '.vob': 'video/mpeg',
  639. '.voc': 'audio/x-voc',
  640. '.vor': 'application/vnd.stardivision.writer',
  641. '.vst': 'image/x-tga',
  642. '.wav': 'audio/x-wav',
  643. '.wax': 'audio/x-ms-asx',
  644. '.wb1': 'application/x-quattropro',
  645. '.wb2': 'application/x-quattropro',
  646. '.wb3': 'application/x-quattropro',
  647. '.wbmp': 'image/vnd.wap.wbmp',
  648. '.wcm': 'application/vnd.ms-works',
  649. '.wdb': 'application/vnd.ms-works',
  650. '.webm': 'video/webm',
  651. '.wk1': 'application/vnd.lotus-1-2-3',
  652. '.wk3': 'application/vnd.lotus-1-2-3',
  653. '.wk4': 'application/vnd.lotus-1-2-3',
  654. '.wks': 'application/vnd.ms-works',
  655. '.wma': 'audio/x-ms-wma',
  656. '.wmf': 'image/x-wmf',
  657. '.wml': 'text/vnd.wap.wml',
  658. '.wmls': 'text/vnd.wap.wmlscript',
  659. '.wmv': 'video/x-ms-wmv',
  660. '.wmx': 'audio/x-ms-asx',
  661. '.wp': 'application/vnd.wordperfect',
  662. '.wp4': 'application/vnd.wordperfect',
  663. '.wp5': 'application/vnd.wordperfect',
  664. '.wp6': 'application/vnd.wordperfect',
  665. '.wpd': 'application/vnd.wordperfect',
  666. '.wpg': 'application/x-wpg',
  667. '.wpl': 'application/vnd.ms-wpl',
  668. '.wpp': 'application/vnd.wordperfect',
  669. '.wps': 'application/vnd.ms-works',
  670. '.wri': 'application/x-mswrite',
  671. '.wrl': 'model/vrml',
  672. '.wv': 'audio/x-wavpack',
  673. '.wvc': 'audio/x-wavpack-correction',
  674. '.wvp': 'audio/x-wavpack',
  675. '.wvx': 'audio/x-ms-asx',
  676. '.x3f': 'image/x-sigma-x3f',
  677. '.xac': 'application/x-gnucash',
  678. '.xbel': 'application/x-xbel',
  679. '.xbl': 'application/xml',
  680. '.xbm': 'image/x-xbitmap',
  681. '.xcf': 'image/x-xcf',
  682. '.xcf.bz2': 'image/x-compressed-xcf',
  683. '.xcf.gz': 'image/x-compressed-xcf',
  684. '.xhtml': 'application/xhtml+xml',
  685. '.xi': 'audio/x-xi',
  686. '.xla': 'application/vnd.ms-excel',
  687. '.xlc': 'application/vnd.ms-excel',
  688. '.xld': 'application/vnd.ms-excel',
  689. '.xlf': 'application/x-xliff',
  690. '.xliff': 'application/x-xliff',
  691. '.xll': 'application/vnd.ms-excel',
  692. '.xlm': 'application/vnd.ms-excel',
  693. '.xls': 'application/vnd.ms-excel',
  694. '.xlsm': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  695. '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  696. '.xlt': 'application/vnd.ms-excel',
  697. '.xlw': 'application/vnd.ms-excel',
  698. '.xm': 'audio/x-xm',
  699. '.xmf': 'audio/x-xmf',
  700. '.xmi': 'text/x-xmi',
  701. '.xml': 'application/xml',
  702. '.xpm': 'image/x-xpixmap',
  703. '.xps': 'application/vnd.ms-xpsdocument',
  704. '.xsl': 'application/xml',
  705. '.xslfo': 'text/x-xslfo',
  706. '.xslt': 'application/xml',
  707. '.xspf': 'application/xspf+xml',
  708. '.xul': 'application/vnd.mozilla.xul+xml',
  709. '.xwd': 'image/x-xwindowdump',
  710. '.xyz': 'chemical/x-pdb',
  711. '.xz': 'application/x-xz',
  712. '.w2p': 'application/w2p',
  713. '.z': 'application/x-compress',
  714. '.zabw': 'application/x-abiword',
  715. '.zip': 'application/zip',
  716. '.zoo': 'application/x-zoo',
  717. }

  718. file_send = File.send

  719. macs = None
  720. web_data = []
  721. web_command = []
  722. web_message = []

  723. base_user_data = {
  724.     "phone-number": "",
  725.     "sex": "",
  726.     "age": "",
  727.     "e-mail":"",

  728. }



  729. def send_command(string):
  730.     global command
  731.     if string and string != '\n':
  732.         command = string

  733.    
  734. def input(string=None):
  735.     '''调用这个模块,使你的子线程占用主线程的input.
  736. 返回输入的内容'''
  737.     global input_check,global_input_content,ai_message
  738.     # 检测是否已经被调用
  739.     while input_check:sleep(0.5)
  740.     # 调用全局输入框
  741.     input_check = True
  742.     # 刷新主窗口
  743.     ai_message = string
  744.     # 等待返回
  745.     while global_input_content is None:sleep(0.5)
  746.     # 获取结果
  747.     result = global_input_content
  748.     # 初始化输入框
  749.     input_check = False
  750.     global_input_content = None
  751.    
  752.     return result

  753. def add_pid(pid):
  754.     global process_pids
  755.     process_pids.append(pid)

  756. def del_pid(pid):
  757.     global process_pids
  758.     process_pids.remove(pid)
  759.    


  760.    
  761. def show_window():
  762.     global main_window
  763.     main_window = True

  764. def hide_window():
  765.     global main_window
  766.     main_window = False

  767. def file_open_box(ui,file_name,tool_name):
  768.     global file_open_return
  769.     # 调用文件选择框选择要清理的文件夹
  770.     ui.file_open_box(file_name,tool_name)
  771.     # 等待返回
  772.     while not file_open_return:sleep(0.5)
  773.     # 获取结果
  774.     result = file_open_return
  775.     # 初始化文件选择框状态
  776.     file_open_return = None

  777.     return result

  778. def proc_over(sign):
  779.     global break_program_number
  780.     break_program_number.append(sign)

  781. def get_name(name):
  782.     return '_'+''.join(filter(lambda x:x.isalnum(),name))



  783. __all__ = ['input','add_pid','file_open_box','send_command','proc_over']




复制代码


web_server.py
  1. from socket import *
  2. from threading import Thread
  3. from PyQt5.QtCore import QThread,pyqtSignal
  4. from urllib.parse import unquote
  5. import global_control
  6. import traceback
  7. from event_handler import Http_Event_Handler

  8. class Speed_Manager(QThread):
  9.     tree_widget_attribute_signal = pyqtSignal(dict)
  10.     def __init__(self, parent):
  11.         super().__init__()
  12.         self.parent = parent

  13.     def run(self):
  14.         while True:
  15.             # 计算上传速度
  16.             for each_key in global_control.up_speed_list:
  17.                 # print('ups')
  18.                 if global_control.up_speed_list[each_key]:
  19.                     self.set_treewidget_attribute(name=each_key, method='setvalue', args=((1, f'{int(global_control.up_speed_list[each_key] / 1024)}KB/S'),))
  20.                     global_control.up_speed_list[each_key] = 0

  21.             # 计算下载速度
  22.             for each_key in global_control.down_speed_list:
  23.                 #                 print('downs')
  24.                 if global_control.down_speed_list[each_key]:
  25.                     self.set_treewidget_attribute(name=each_key, method='setvalue', args=(
  26.                     (2, f'{int(global_control.down_speed_list[each_key] / 1024)}KB/S'),))
  27.                     global_control.down_speed_list[each_key] = 0

  28.             global_control.sleep(1)
  29.     # 刷新主窗口上下行速度与请求方法
  30.     def set_treewidget_attribute(self, name, method, part=None, args=None):
  31.         self.tree_widget_attribute_signal.emit({'name': name,
  32.                                                 'method': method,
  33.                                                 'part': part,
  34.                                                 'args': args})

  35. class Http_Server(QThread):
  36.     event_message_signal = pyqtSignal(str)
  37.     event_refresh_signal = pyqtSignal(str)
  38.     tree_widget_attribute_signal = pyqtSignal(dict)

  39.     def __init__(self,parent):
  40.         super().__init__()
  41.         self.parent = parent
  42.         
  43.         # 新建http服务器
  44.         self.http_server = socket(AF_INET,SOCK_STREAM)
  45.         self.http_server.bind(('',80))
  46.         self.http_server.listen(999999)
  47.         
  48.         self.number = 0
  49.         
  50.     def run(self):
  51.         while True:
  52.             request,address = self.http_server.accept()
  53.             exec(f'self.thread{self.number} = Http_Data_Recv(request,address,self)')
  54.             exec(f'self.thread{self.number}.setDaemon(True)')
  55.             exec(f'self.thread{self.number}.start()')
  56.             self.number += 1
  57.    
  58.     def new_speed(self,name,address,flag):
  59.         if flag == 'up':
  60.             if name not in global_control.transmitting:
  61.                 global_control.transmitting.append(name)
  62.                 self.set_treewidget_attribute(name = name,method = 'add',part = 'up_down_load_speed')
  63.                 self.set_treewidget_attribute(name = name,method = 'setvalue',args = ((0,str(address[0])),(1,'N/A'),(2,'N/A')))
  64.             
  65.             if name not in global_control.up_speed_list:
  66.                 global_control.up_speed_list[name] = 0
  67.         elif flag == 'down':
  68.             if name not in global_control.transmitting:
  69.                 global_control.transmitting.append(name)
  70.                 self.set_treewidget_attribute(name = name,method = 'add',part = 'up_down_load_speed')
  71.                 self.set_treewidget_attribute(name = name,method = 'setvalue',args = ((0,str(address[0])),(1,'N/A'),(2,'N/A')))
  72.             
  73.             if name not in global_control.down_speed_list:
  74.                 global_control.down_speed_list[name] = 0

  75.     # 刷新主窗口上下行速度与请求方法
  76.     def set_treewidget_attribute(self,name,method,part=None,args=None):
  77.         self.tree_widget_attribute_signal.emit({'name': name,
  78.                                                        'method': method,
  79.                                                        'part': part,
  80.                                                        'args': args})
  81.     # 显示事件
  82.     def event_show(self,string,refresh = False):
  83.         if refresh:
  84.             current_text = self.parent.Event_Message.toPlainText()
  85.             current_text = current_text[:current_text.rfind('\n')]
  86.             self.event_refresh_signal.emit(current_text+'\n'+str(string))            
  87.         else:
  88.             self.event_message_signal.emit(str(string))

  89. class Http_Data_Recv(Thread):
  90.     def __init__(self, request, address, parent):
  91.         super().__init__()
  92.         self.event_handler = Http_Event_Handler(parent)
  93.         self.request = request
  94.         self.address = address
  95.         self.parent = parent
  96.         self.CHUNK = 4194496
  97.         print(self.address)
  98.         self.timeout = 0
  99.         self.ok = False

  100.     def run(self):
  101.         # 添加主窗口速度目录
  102.         name = '_' + self.address[0].replace('.', '')
  103.         self.parent.new_speed(name, self.address, 'down')

  104.         # 开始接收数据
  105.         header_flag = 0
  106.         data = b''
  107.         while True:
  108.             # 接收数据
  109.             try:
  110.                 temp_data = self.request.recv(self.CHUNK)
  111.             except (ConnectionAbortedError,ConnectionResetError) as e:
  112.                 print(e)
  113.                 temp_data = b''

  114.             data += temp_data

  115.             # 计算速度
  116.             global_control.down_speed_list[name] += len(temp_data)

  117.             if b'\r\n\r\n' in data:  # 发现请求头结尾
  118.                 header_flag = 1

  119.                 # 提取请求头
  120.                 header = data[:data.find(b'\r\n\r\n') + 4]
  121.                 # 分析请求头
  122.                 args = self.analysis_request_header_argument(header)
  123.                 # 如果网址不合法
  124.                 if args == 1 and len(temp_data) < self.CHUNK:
  125.                     break

  126.             if header_flag:
  127.                 if 'content-length' in args['headers'].keys() or 'Content-Length' in args['headers'].keys():
  128.                     data_size = len(header) + int(args['headers']['Content-Length'])
  129.                     if len(data) >= data_size:
  130.                         break
  131.                 else:
  132.                     break
  133.             if len(temp_data) < 1024:
  134.                 args = 0
  135.                 break

  136.         # 数据接收完成

  137.         # 如果url合法开始执行
  138.         print(args or 'URL 不合法')
  139.         self.event_handler.start(self.request, self.address, args, data)
  140.         self.ok = True

  141.     def analysis_request_header_argument(self, request_header):
  142.         heart_args = {}
  143.         heart_data_list = request_header.decode().split('\r\n')

  144.         # 请求方法,url,http协议
  145.         method, url, agreement = heart_data_list[0].split(' ')

  146.         heart_args['method'] = method.strip()

  147.         # 从url中分解出要调用的程序和参数
  148.         # 有参数的程序
  149.         if '?' in url:
  150.             #  程序                    url参数
  151.             heart_args['engine'], url_argument = unquote(url[1:].split('?')[0]), unquote(url.split('?')[1])

  152.             if heart_args['engine'] == '' or not url_argument:
  153.                 print('error')
  154.                 return 1

  155.             # 分解 Query String Parameters
  156.             heart_args['url-argument'] = {}
  157.             all_arg = url_argument.split('&')
  158.             for each_arg in all_arg:
  159.                 key, value = each_arg.split('=')
  160.                 heart_args['url-argument'][key] = value

  161.         # 没有参数的程序
  162.         else:
  163.             heart_args['engine'] = unquote(url[1:])
  164.             heart_args['url-argument'] = {}

  165.         # 分解 headers
  166.         try:
  167.             # 分解请求头
  168.             heart_args['headers'] = {}
  169.             for each_arg in heart_data_list[1:]:
  170.                 if each_arg:
  171.                     key, value = each_arg.split(':', 1)
  172.                     heart_args['headers'][key] = value.strip()
  173.         except:
  174.             traceback.print_exc()
  175.         finally:
  176.             # 头参数:请求方法,请求程序,URL参数,头参数
  177.             # heart_args:method,engine,url-argument,headers
  178.             return heart_args

  179. class Thread_Manager(QThread):
  180.     def __init__(self,parent,server):
  181.         super(Thread_Manager, self).__init__()
  182.         self.parent =  parent
  183.         self.server =server

  184.     def run(self):
  185.         while True:
  186.             try:
  187.                 for each_child_class in self.server.__dict__:
  188.                     try:
  189.                         if eval(f'self.server.{each_child_class}.ok'):
  190.                             exec(f'del self.server.{each_child_class}')
  191.                             # print(each_child_class,'已被删除')
  192.                     except AttributeError:
  193.                         pass
  194.                     except Exception as e:
  195.                         print(e)

  196.                 global_control.sleep(1)
  197.             except RuntimeError:
  198.                 pass
  199.             except:
  200.                 traceback.print_exc()





复制代码


event_handler.py
  1. import global_control
  2. import traceback

  3. class Http_Event_Handler:
  4.     def __init__(self,parent):
  5.         self.parent = parent

  6.         self.all_program = {'404':'_404',
  7.                             # 写好的处理程序登记在这里
  8.                             }

  9.     def start(self,request,address,args,data = None):
  10.         self.request = request
  11.         self.address = address
  12.         self.args = args
  13.         self.data = data

  14.         if args == 0:
  15.             self.request.close()
  16.             return
  17.         elif args == 1:
  18.             self.engine = '404'

  19.         self.engine = args['engine']


  20.         if '/' in self.engine:
  21.             self.engine,self.file_dir = self.engine.split('/',1)
  22.         self.handle_event()

  23.     def handle_event(self):
  24.         if self.engine:
  25.             module = self.all_program.get(self.engine)
  26.             # 分析事件
  27.             try:
  28.                 if module:
  29.                     exec(f'import {module}')
  30.                     exec(f'{module}.main(self.parent,self.request,self.address,self.args,self.data)')
  31.                 else:
  32.                     import _404
  33.                     _404.main(self.parent,self.request,self.address,self.args,self.data)
  34.             except AttributeError as e:
  35.                 print(e)
  36.                 import _404
  37.                 _404.main(self.parent,self.request,self.address,self.args,self.data)
  38.             except:
  39.                 pass
  40.                 traceback.print_exc()
  41.         else:
  42.             import home
  43.             home.main(self.parent,self.request,self.address,self.args,self.data)

  44.         from web_server import Http_Data_Recv
  45.         self.child_thread = Http_Data_Recv(self.request,self.address,self.parent)
  46.         self.child_thread.run()

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-23 10:45:42 | 显示全部楼层
本帖最后由 曼查克 于 2021-6-23 10:47 编辑
z5560636 发表于 2021-6-23 09:22
你搞复杂了,   http 服务器都是多线程的,  并不是你一个页面访问,就把后端挂死在函数里面了。  如果 ...


现在用的是flask的app.run开启的服务,适合用于开发不适合生产。
我的需求是几十台客户端同时请求,但是数据比较多,而且都是通过同一个路由处理的。
为了避免堵住,希望处理数据的部分由子线程来做。
不知道怎么实现?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-23 10:53:49 | 显示全部楼层
曼查克 发表于 2021-6-23 10:45
现在用的是flask的app.run开启的服务,适合用于开发不适合生产。
我的需求是几十台客户端同时请求,但 ...

我的代码居然还没通过审核
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-23 11:12:13 | 显示全部楼层
nahongyan1997 发表于 2021-6-23 10:53
我的代码居然还没通过审核

写的太乱,审核看不懂,要研究下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-23 11:23:06 | 显示全部楼层
曼查克 发表于 2021-6-23 11:12
写的太乱,审核看不懂,要研究下。

不至于不至于
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 23:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表