RJ博客

Python多线程 - 刷简书阅读数

本文目录

今天发现简书在未登录状态下,访问一次阅读数+1,基于这个逻辑想到了再Linux下用curl访问链接增加阅读数,发现curl访问并没有使阅读数增加,基本确定简书是用ajax请求接口使阅读数+1的,经过排查发现是 mark_viewed.json 这个接口,下面以《QQ麻将番数规则》这篇文章为例讲解下,阅读数上报接口:

http://www.jianshu.com/notes/1a7358890b15/mark_viewed.json

一个简单的版本:

import requests
import thread

headers = {'Referer': 'http://www.jianshu.com/p/1a7358890b15'}
user_data = {'uuid':'b3a9e7fd-f0e1-40ce-adb9-d0cb61796880'}
url = 'http://www.jianshu.com/notes/1a7358890b15/mark_viewed.json'

data = []
count = 0

while 1:
    response = requests.post(url, headers=headers, data=user_data)
    
    count+=1
    if count%10==0:
        print count

运行结果:

C:\Users\Administrator\Desktop>python read_count.py
10
20
30
40
50

已经能让阅读数增加了,但是速度比较慢,而且此版本网络不好的话,post会报错,导致所属进程终止运行,当所有进程都被终止了,程序也就不会生效了。

于是添加了抛异常模块,同时于是结合了python的多线程编程:

import requests
import thread
import time

# header
headers = {'Referer': 'http://www.jianshu.com/p/1a7358890b15'}
# user_data
user_data = {'uuid':'b3a9e7fd-f0e1-40ce-adb9-d0cb61796880'}
# url
url = 'http://www.jianshu.com/notes/1a7358890b15/mark_viewed.json'

data = []
count = 0
passes = 0 

def calculate():
    global count,passes
    while 1:
        '''抛异常,不然网络不好的话,post会报错,导致所属进程终止运行,
        当所有进程都被终止了,程序也就不会生效了'''
        try:
            response = requests.post(url, headers=headers, data=user_data)
        except Exception as e:
            passes+=1
            print 'pass:'+str(passes)
        
        count+=1
        if count%100==0:
            print count

def runThread():
    for x in xrange(1,50):
        thread.start_new_thread( calculate, () )

if __name__ == '__main__':
    # 创建新线程
    try:
        runThread()
    except:
        print "Error: unable to start thread"

    while 1:
        time.sleep(1)
        pass

另一种多线程写法:

import requests
import threading
import time
 
# header
headers = {'Referer': 'http://www.jianshu.com/p/1a7358890b15'}
# user_data
user_data = {'uuid':'b3a9e7fd-f0e1-40ce-adb9-d0cb61796880'}
# url
url = 'http://www.jianshu.com/notes/1a7358890b15/mark_viewed.json'

data = []
threads = []
count = 0
passes = 0

class myThread (threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
    def run(self):
        # print "Starting " + self.name
        print_time(self.name, self.counter, 100)

def print_time(threadName, delay, counter):
    global count,passes
    while counter:
        # time.sleep(delay)
        try:
            response = requests.post(url, headers=headers, data=user_data)
        except Exception as e:
            passes+=1
            print 'pass:'+str(passes)

        count+=1
        if count%100==0:
            print count

        counter -= 1

def runThread():
    for x in xrange(1,500):
        # 创建新线程
        exec("thread%s = myThread(%s, 'Thread-%s', 1)" %(x,x,x))
        # 开启新线程
        exec("thread%s.start()" %(x))
        # 添加线程到线程列表
        exec("threads.append(thread%s)" %(x))
    
 
count = 0
while count>=0:
    t0 = time.time()

    # 等待所有线程完成
    for t in threads:
        t.join()

    print "Exiting Main Thread"
    t1 = time.time()
    print "time used:"+str(t1-t0)

    print "Starting Main Thread"
    print "Total:"+str(count*50000)+"\n"
    count += 1

    runThread()

Windows下测试,刷50000次耗时127秒左右:

Exiting Main Thread
time used:127s
Starting Main Thread
Total:50000


References:

http://www.runoob.com/python/python-multithreading.html

相关推荐

发表评论

  • 欢迎评论

  • Приветик! Хочу не пролететь с заказом рекламы в интернете. Помогите мне как не допуститьэтого? Я приобрела салон красоты, который уже 10 лет работает. ОН очаровательный салончик. Муж от моего выбора был в шоке. Доходы у моего салончика очень маленькие оказались. Вот решила заказать сайт и порекламироваться. Рекомендуют Родственники Web-студию Юлии Беззубовой. Что вы о ней думаете?

  • saint louis school of medicine urine drug screen opiates house call doctors houston

  • Перезвоните мне пожалуйста 8(812) 701-06-22 Антон.

  • A fantastic looking and talented girls can easily support in forgetting everything and they can quickly anticipate top life without the need of any fail. vip escort in paris look bunga-escorts.com/paris-escorts/sabina-high-class-escort-paris

  • white round pill with watson 932 tom thumb pharmacy hours apple cider vinegar pills vs liquid

  • Le cr¨¦dit doit aller ¨¤ Manny, aussi, pour son ¨¦thique de travail, la sinc¨¦rit¨¦ et la d¨¦termination ¨¤ suivre le programme d'entra?nement nous avons con?u pour lui.

  • Друзья, щедро делюсь с вами информацией. Нашла тут видеопортал. Сразу поразил огромный функционал, а главное что там за все платят. Если совсем коротко 1. Создали свой канал - вам заплатили 2. Добавили видео - вам заплатили 3. Ваше видео посмотрели — вам заплатили 4. Посмотрели рекламу в вашем видео — вам заплатили 5. Вы пригласили реферала — вам заплатили 6. Платят 5% со всего дохода каждого вашего реферала 7. Короче та пассивный доход в самом что не наесть действии!!! Но это далеко не все. В проект встроена полноценная социальная сеть, два независимых интернет магазина цифровых и реальных товаров, где вы можете как покупать так и продавать свои товары! Опять же возможность заработать и приобрести что то полезное для себя... На сайте очень удобно искать каналы, смотреть видео, комментировать, переписываться и лайкать, дизлайкать, участвовать в разнообразных конкурсах, поднимать в том свои каналы и ролики. Встроена система личной переписки, система подарков,

  • Фишка оптимальной Рекламы в интернете в 2019 это комплекс поисковой оптимизации в Связке Xrumer Instagram YouTube Pinterest blogger. от 20 usd за услугу. Опыт 25 лет Skype evg7773 Viber 380976131437

  • Ремонт квартир В москве под ключ

  • Great looking site. Think you did a great deal of your very own html coding.

  • Hi there, I enjoy reading through your article. I wanted to write a little comment to support you.

  • damei yamiedie