Python多线程技术增加网站帖子的查看量

本文通过实际测试,展示了Python多线程在特定场景下的性能表现,对比了Python与C语言的pthread多线程效率,并探讨了Python多线程的局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

据说Python多线程是伪多线程,本质上是单线程,经测试,效果确实不好,速度远比不上pthread多线程。

其实,Python本来就比C慢,没法比的。不过Python简单,这点pthread永远比不了。

注:千万不能恶意刷站,否则后果自负,哈哈~~~

import threading
import urllib.error
import urllib.request

TIMES = 10000
URL = "http://bbs.tianya.cn"


class WorkerThread(threading.Thread):
    def __init__(self, name):
        threading.Thread.__init__(self)
        self.name = name

    def run(self):
        while True:
            WorkerThread.LOCK.acquire()
            WorkerThread.COUNT = WorkerThread.COUNT + 1
            if WorkerThread.COUNT > WorkerThread.TIMES:
                WorkerThread.LOCK.release()
                break
            print('线程名称:%s\t读取次数:%d' % (self.name, WorkerThread.COUNT))
            WorkerThread.LOCK.release()
            try:
                urllib.request.urlopen(WorkerThread.URL).read()
            except (urllib.error.URLError, ConnectionResetError, Exception):
                print('线程名称:%s\t读取失败' % (self.name, ))


def thread_demo():
    for i in range(100):
        WorkerThread("Worker_%02d" % (i, )).start()


if __name__ == '__main__':
    WorkerThread.URL = URL
    WorkerThread.COUNT = 0
    WorkerThread.TIMES = TIMES
    WorkerThread.LOCK = threading.RLock()

    thread_demo()

运行结果:

"C:\Program Files\Python\python.exe" "D:/Pycharm Projects/PyDemo/ThreadDemo.py"
线程名称:Worker_00	读取次数:1
线程名称:Worker_01	读取次数:2
线程名称:Worker_02	读取次数:3
线程名称:Worker_03	读取次数:4
线程名称:Worker_04	读取次数:5
线程名称:Worker_05	读取次数:6
线程名称:Worker_06	读取次数:7
线程名称:Worker_07	读取次数:8
线程名称:Worker_08	读取次数:9
线程名称:Worker_09	读取次数:10
线程名称:Worker_10	读取次数:11
线程名称:Worker_11	读取次数:12
线程名称:Worker_12	读取次数:13
线程名称:Worker_13	读取次数:14
线程名称:Worker_14	读取次数:15
线程名称:Worker_15	读取次数:16
线程名称:Worker_16	读取次数:17
线程名称:Worker_17	读取次数:18
线程名称:Worker_18	读取次数:19
线程名称:Worker_19	读取次数:20
线程名称:Worker_20	读取次数:21
线程名称:Worker_21	读取次数:22
线程名称:Worker_22	读取次数:23
线程名称:Worker_23	读取次数:24
线程名称:Worker_24	读取次数:25
线程名称:Worker_25	读取次数:26
线程名称:Worker_26	读取次数:27
线程名称:Worker_27	读取次数:28
线程名称:Worker_28	读取次数:29
线程名称:Worker_29	读取次数:30
线程名称:Worker_30	读取次数:31
线程名称:Worker_31	读取次数:32
线程名称:Worker_32	读取次数:33
线程名称:Worker_33	读取次数:34
线程名称:Worker_34	读取次数:35
线程名称:Worker_35	读取次数:36
线程名称:Worker_36	读取次数:37
线程名称:Worker_37	读取次数:38
线程名称:Worker_38	读取次数:39
线程名称:Worker_39	读取次数:40
线程名称:Worker_40	读取次数:41
线程名称:Worker_41	读取次数:42
线程名称:Worker_42	读取次数:43
线程名称:Worker_43	读取次数:44
线程名称:Worker_44	读取次数:45
线程名称:Worker_45	读取次数:46
线程名称:Worker_46	读取次数:47
线程名称:Worker_47	读取次数:48
线程名称:Worker_48	读取次数:49
线程名称:Worker_49	读取次数:50
线程名称:Worker_50	读取次数:51
线程名称:Worker_51	读取次数:52
线程名称:Worker_52	读取次数:53
线程名称:Worker_53	读取次数:54
线程名称:Worker_54	读取次数:55
线程名称:Worker_55	读取次数:56
线程名称:Worker_56	读取次数:57
线程名称:Worker_57	读取次数:58
线程名称:Worker_58	读取次数:59
线程名称:Worker_59	读取次数:60
线程名称:Worker_60	读取次数:61
线程名称:Worker_61	读取次数:62
线程名称:Worker_62	读取次数:63
线程名称:Worker_63	读取次数:64
线程名称:Worker_64	读取次数:65
线程名称:Worker_65	读取次数:66
线程名称:Worker_66	读取次数:67
线程名称:Worker_67	读取次数:68
线程名称:Worker_68	读取次数:69
线程名称:Worker_69	读取次数:70
线程名称:Worker_70	读取次数:71
线程名称:Worker_71	读取次数:72
线程名称:Worker_72	读取次数:73
线程名称:Worker_73	读取次数:74
线程名称:Worker_74	读取次数:75
线程名称:Worker_75	读取次数:76
线程名称:Worker_76	读取次数:77
线程名称:Worker_77	读取次数:78
线程名称:Worker_78	读取次数:79
线程名称:Worker_79	读取次数:80
线程名称:Worker_80	读取次数:81
线程名称:Worker_81	读取次数:82
线程名称:Worker_82	读取次数:83
线程名称:Worker_83	读取次数:84
线程名称:Worker_84	读取次数:85
线程名称:Worker_85	读取次数:86
线程名称:Worker_86	读取次数:87
线程名称:Worker_87	读取次数:88
线程名称:Worker_88	读取次数:89
线程名称:Worker_89	读取次数:90
线程名称:Worker_90	读取次数:91
线程名称:Worker_91	读取次数:92
线程名称:Worker_92	读取次数:93
线程名称:Worker_93	读取次数:94
线程名称:Worker_94	读取次数:95
线程名称:Worker_95	读取次数:96
线程名称:Worker_96	读取次数:97
线程名称:Worker_97	读取次数:98
线程名称:Worker_98	读取次数:99
线程名称:Worker_99	读取次数:100
线程名称:Worker_13	读取次数:101
线程名称:Worker_17	读取次数:102
线程名称:Worker_06	读取次数:103
线程名称:Worker_75	读取次数:104
线程名称:Worker_59	读取次数:105
线程名称:Worker_09	读取次数:106
线程名称:Worker_30	读取次数:107
线程名称:Worker_83	读取次数:108
线程名称:Worker_32	读取次数:109
线程名称:Worker_48	读取次数:110
线程名称:Worker_33	读取次数:111
线程名称:Worker_90	读取次数:112
线程名称:Worker_38	读取次数:113
线程名称:Worker_45	读取次数:114
线程名称:Worker_40	读取次数:115
线程名称:Worker_52	读取次数:116
线程名称:Worker_03	读取次数:117
线程名称:Worker_87	读取次数:118
线程名称:Worker_19	读取次数:119
线程名称:Worker_89	读取次数:120
线程名称:Worker_56	读取次数:121
线程名称:Worker_64	读取次数:122
线程名称:Worker_31	读取次数:123
线程名称:Worker_24	读取次数:124
线程名称:Worker_96	读取次数:125
线程名称:Worker_00	读取次数:126
线程名称:Worker_43	读取次数:127
线程名称:Worker_93	读取次数:128
线程名称:Worker_20	读取次数:129
线程名称:Worker_53	读取次数:130
线程名称:Worker_46	读取次数:131
线程名称:Worker_97	读取次数:132
线程名称:Worker_35	读取次数:133
线程名称:Worker_16	读取次数:134
线程名称:Worker_36	读取次数:135
线程名称:Worker_58	读取次数:136
线程名称:Worker_05	读取次数:137
线程名称:Worker_76	读取次数:138
线程名称:Worker_85	读取次数:139
线程名称:Worker_47	读取次数:140
线程名称:Worker_59	读取次数:141
线程名称:Worker_37	读取次数:142
线程名称:Worker_68	读取次数:143
线程名称:Worker_51	读取次数:144
线程名称:Worker_91	读取次数:145
线程名称:Worker_63	读取次数:146
线程名称:Worker_71	读取次数:147
线程名称:Worker_90	读取次数:148
线程名称:Worker_33	读取次数:149
线程名称:Worker_80	读取次数:150
线程名称:Worker_50	读取次数:151
线程名称:Worker_57	读取次数:152
线程名称:Worker_48	读取次数:153
线程名称:Worker_26	读取次数:154
线程名称:Worker_32	读取次数:155
线程名称:Worker_83	读取次数:156
线程名称:Worker_29	读取次数:157
线程名称:Worker_72	读取次数:158
线程名称:Worker_41	读取次数:159
线程名称:Worker_34	读取次数:160
线程名称:Worker_55	读取次数:161
线程名称:Worker_66	读取次数:162
线程名称:Worker_70	读取次数:163
线程名称:Worker_28	读取次数:164
线程名称:Worker_11	读取次数:165
线程名称:Worker_12	读取次数:166
线程名称:Worker_89	读取次数:167
线程名称:Worker_40	读取次数:168
线程名称:Worker_54	读取次数:169
线程名称:Worker_02	读取次数:170
线程名称:Worker_13	读取次数:171
线程名称:Worker_99	读取次数:172
线程名称:Worker_06	读取次数:173
线程名称:Worker_94	读取次数:174
线程名称:Worker_82	读取次数:175
线程名称:Worker_61	读取次数:176
线程名称:Worker_27	读取次数:177
线程名称:Worker_78	读取次数:178
线程名称:Worker_62	读取次数:179
线程名称:Worker_92	读取次数:180
线程名称:Worker_21	读取次数:181
线程名称:Worker_81	读取次数:182
线程名称:Worker_25	读取次数:183
线程名称:Worker_15	读取次数:184
线程名称:Worker_79	读取次数:185
线程名称:Worker_18	读取次数:186
线程名称:Worker_75	读取次数:187
线程名称:Worker_60	读取次数:188
线程名称:Worker_88	读取次数:189
线程名称:Worker_46	读取次数:190
线程名称:Worker_69	读取次数:191
线程名称:Worker_09	读取次数:192
线程名称:Worker_67	读取次数:193
线程名称:Worker_43	读取次数:194
线程名称:Worker_98	读取次数:195
线程名称:Worker_30	读取次数:196
线程名称:Worker_10	读取次数:197
线程名称:Worker_45	读取次数:198
线程名称:Worker_93	读取次数:199
线程名称:Worker_44	读取次数:200
线程名称:Worker_95	读取次数:201
线程名称:Worker_49	读取次数:202
线程名称:Worker_20	读取次数:203
线程名称:Worker_74	读取次数:204
线程名称:Worker_17	读取次数:205
线程名称:Worker_38	读取次数:206
线程名称:Worker_77	读取次数:207
线程名称:Worker_65	读取次数:208
线程名称:Worker_01	读取次数:209
线程名称:Worker_31	读取次数:210
线程名称:Worker_73	读取次数:211
线程名称:Worker_96	读取次数:212
线程名称:Worker_87	读取次数:213
线程名称:Worker_03	读取次数:214
线程名称:Worker_52	读取次数:215
线程名称:Worker_19	读取次数:216
线程名称:Worker_14	读取次数:217
线程名称:Worker_86	读取次数:218
线程名称:Worker_64	读取次数:219
线程名称:Worker_24	读取次数:220
线程名称:Worker_56	读取次数:221
线程名称:Worker_00	读取次数:222
线程名称:Worker_23	读取次数:223
线程名称:Worker_53	读取次数:224
线程名称:Worker_39	读取次数:225
线程名称:Worker_84	读取次数:226
线程名称:Worker_04	读取次数:227
线程名称:Worker_22	读取次数:228
线程名称:Worker_66	读取次数:229
线程名称:Worker_16	读取次数:230
线程名称:Worker_40	读取次数:231
线程名称:Worker_14	读取次数:232
线程名称:Worker_87	读取次数:233
线程名称:Worker_63	读取次数:234
线程名称:Worker_81	读取次数:235
线程名称:Worker_56	读取次数:236
线程名称:Worker_23	读取次数:237
线程名称:Worker_02	读取次数:238
线程名称:Worker_52	读取次数:239
线程名称:Worker_65	读取次数:240
线程名称:Worker_30	读取次数:241
线程名称:Worker_73	读取次数:242
线程名称:Worker_95	读取次数:243
线程名称:Worker_62	读取次数:244
线程名称:Worker_01	读取次数:245
线程名称:Worker_83	读取次数:246
线程名称:Worker_06	读取次数:247
线程名称:Worker_46	读取次数:248
线程名称:Worker_09	读取次数:249
线程名称:Worker_45	读取次数:250
线程名称:Worker_70	读取次数:251
线程名称:Worker_26	读取次数:252
线程名称:Worker_54	读取次数:253
线程名称:Worker_60	读取次数:254
线程名称:Worker_51	读取次数:255
线程名称:Worker_20	读取次数:256
线程名称:Worker_25	读取次数:257
线程名称:Worker_03	读取次数:258
线程名称:Worker_68	读取次数:259
线程名称:Worker_58	读取次数:260
线程名称:Worker_47	读取次数:261
线程名称:Worker_13	读取次数:262
线程名称:Worker_17	读取次数:263
线程名称:Worker_16	读取次数:264
线程名称:Worker_41	读取次数:265
线程名称:Worker_40	读取次数:266
线程名称:Worker_59	读取次数:267
线程名称:Worker_23	读取次数:268
线程名称:Worker_35	读取次数:269
线程名称:Worker_69	读取次数:270
线程名称:Worker_48	读取次数:271
线程名称:Worker_56	读取次数:272
线程名称:Worker_63	读取次数:273
线程名称:Worker_29	读取次数:274
线程名称:Worker_57	读取次数:275
线程名称:Worker_02	读取次数:276
线程名称:Worker_05	读取次数:277
线程名称:Worker_06	读取次数:278
线程名称:Worker_38	读取次数:279
线程名称:Worker_92	读取次数:280
线程名称:Worker_80	读取次数:281
线程名称:Worker_45	读取次数:282
线程名称:Worker_18	读取次数:283
线程名称:Worker_98	读取次数:284
线程名称:Worker_39	读取次数:285

Process finished with exit code -1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值