小编Kud*_*dzu的帖子

urllib.request连接到HTTP服务器的持久性

我想在我们的一个Web服务器上进行一些性能测试,以查看服务器如何处理大量持久连接.不幸的是,我对HTTP和Web测试并不十分熟悉.这是我迄今为止获得的Python代码:

import http.client
import argparse
import threading


def make_http_connection():
    conn = http.client.HTTPConnection(options.server, timeout=30)
    conn.connect()


if __name__ == '__main__':
    parser = argparse.ArgumentParser()

    parser.add_argument("num", type=int, help="Number of connections to make (integer)")
    parser.add_argument("server", type=str, help="Server and port to connect to. Do not prepend \'http://\' for this")

    options = parser.parse_args()

    for n in range(options.num):
        connThread = threading.Thread(target = make_http_connection, args = ())
        connThread.daemon = True
        connThread.start()

    while True:
        try:
            pass
        except KeyboardInterrupt:
            break
Run Code Online (Sandbox Code Playgroud)

我的主要问题是:如何保持这些连接存活?我设置了一个很长的超时,但这是一个非常粗糙的方法,我甚至不确定它会影响连接.只需要每隔一段时间请一个字节或两个字节吗?

(另外,在一个不相关的说明中,有没有比while True:我代码末尾的丑陋块更好的等待键盘中断的程序?)

python http python-3.x

4
推荐指数
1
解决办法
7671
查看次数

类实例中的增量实例计数器

我正在编写一个程序,旨在在Active Directory中生成大量活动,以对另一个软件进行压力测试.要创建用户,我正在创建一个简单的类

class ADUser(object):
  def __init__(self):
    self.firstname = self.firstname() # returns a random name from a big list
    self.lastname = self.lastname()   # returns a random name from a big list
    self.fullname = self.firstname + " " + self.lastname
    self.employeeid = ???             # an incrementing integer... somehow
Run Code Online (Sandbox Code Playgroud)

这是employeeid给我带来麻烦的属性.我喜欢每次创建用户对象时有这样的增量-这将保证一个唯一的ID号,帮我记录下来的活动.但是,我不确定如何在课堂上这样做.我能做到这一点以外的类易足以与一个for循环,但是这似乎并不像干净的或最"Python化"方法.

这可能是一个简单的问题,但它一直困扰着我.

python class instance

2
推荐指数
1
解决办法
124
查看次数

Zendesk:使用Python 3.2.2'请求'模块和API令牌进行身份验证

我被要求处理外部REST API(实际上是Zendesk),其凭据需要格式化为{email}/token:{security_token}- 单个值而不是通常的用户名/密码对.我正在尝试使用Python requests模块执行此任务,因为它是Pythonic并且不会伤害我的大脑,但我不确定如何格式化身份验证凭据.Zendesk文档仅提供使用的访问示例curl,我不熟悉.

这是我目前的requests.auth.AuthBase子类:

class ZDTokenAuth(requests.auth.AuthBase):
    def __init__(self,username,token):
        self.username = username
        self.token = token

    def __call__(self,r):
        auth_string = self.username + "/token:" + self.token
        auth_string = auth_string.encode('utf-8')
        r.headers['Authorization'] = base64.b64encode(auth_string)
        return r
Run Code Online (Sandbox Code Playgroud)

我不确定是否需要各种编码,但这就是有人在github上做的事情(https://github.com/skipjac/Zendesk-python-api/blob/master/zendesk-ticket-delete.py)所以为什么不.我当然没有编码也尝试过 - 当然 - 结果相同.

这是我用来测试这个的类和方法:

class ZDStats(object):
    api_base = "https://mycompany.zendesk.com/api/v2/"

    def __init__(self,zd_auth):
        self.zd_auth = zd_auth # this is assumed to be a ZDTokenAuth object

    def testCredentials(self):
        zd_users_url = self.api_base + "users.json"
        zdreq = requests.get(zd_users_url, auth=self.zdauth)
        return zdreq
Run Code Online (Sandbox Code Playgroud)

这称为: …

python json subclass zendesk python-requests

2
推荐指数
1
解决办法
2308
查看次数

list.remove()方法未提供预期结果

在尝试从列表中删除不以特定子字符串开头的所有文件名时,我遇到了以下意外行为:

>>> allfiles = os.listdir(mydir)
>>> allfiles
['dwcpybyext.sh', 'dwlaunch', 'libupdate.sh', 'ntpsync.sh']
>>> for f in allfiles:
...    if f.startswith('n') == False:
...        allfiles.remove(f)
...
>>> allfiles
['dwlaunch', 'ntpsync.sh']
Run Code Online (Sandbox Code Playgroud)

从理论上讲,这应该已经删除了不从列表开始的每个文件名'n'.相反,它留'd'在列表中的一个开头.如果我改变循环使用if f.startswith('d') == False:我得到['dwcpybyext.sh', 'dwlaunch', 'ntpsync.sh']- 最后一项甚至不包含一个'd'字符.

为什么我看到这种行为?它似乎不太可能是Python list.remove()方法中的错误- 如果我替换del allfiles[allfiles.index(f)],我会得到相同的行为,并且.remove()基本上只是一个别名.

python list

1
推荐指数
1
解决办法
419
查看次数

标签 统计

python ×4

class ×1

http ×1

instance ×1

json ×1

list ×1

python-3.x ×1

python-requests ×1

subclass ×1

zendesk ×1