小编bei*_*ler的帖子

Python - 使用带有多线程的nonce

我正在使用python 2请求.这个问题更像是对如何改善这种表现的好奇心.

现在的问题是我必须在请求的标头中向HTTPS服务器发送加密签名.此签名包含一个必须是时间戳的"nonce",并且总是必须增加(在服务器端).

显然,这会对在多个线程上运行多个HTTP会话造成严重破坏.由于在生成标头和发送HTTPS POST请求之间中断,请求最终不按顺序发送.

解决方案是在创建签名之前锁定线程,直到收到HTTPS数据结束.理想情况下,我想在HTTP请求为SENT后释放LOCK,而不必等待收到数据.在HTTP标头是SENT之后,有没有办法可以使用请求释放锁定?查看代码示例:

self.lock是一个Threading.Lock.此类(self)的此实例在多个Thread之间共享.

def get_nonce(self):
    return int(1000*time.time())

def do_post_request(self, endpoint, parameters):
    with self.lock:
        url = self.base + endpoint
        urlpath = endpoint
        parameters['nonce'] = self.get_nonce()
        postdata = urllib.urlencode(parameters)
        message = urlpath + hashlib.sha256(str(parameters['nonce']) + postdata).digest()
        signature = hmac.new(base64.b64decode(self.secret_key), message, hashlib.sha512)
        headers = {
            'API-Key': self.api_key,
            'API-Sign': base64.b64encode(signature.digest())
        }
        data = urllib.urlencode(parameters)
        response = requests.post(url, data=data, headers=headers, verify=True).json()

    return response
Run Code Online (Sandbox Code Playgroud)

python multithreading python-2.7 python-requests

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

Azure"App Service" - Django和SQLite

我有一个django应用程序(特别是django-rest).当我运行本网站的本地副本时,我的请求可以在50-400ms内处理.

接下来,我设法部署到Microsoft Azure App Service.现在,在我可以购买的最昂贵的层级下,响应将在800-2000ms范围内回归.

该应用程序对sqlite数据库执行简单查询.此数据库文件大约为30兆字节,最大的表为12000行.

我应该指出对数据库的所有访问权限都是只读的,因此没有争用问题.

组态:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(PROJECT_ROOT, 'mydatabase.db'),
    }
}
Run Code Online (Sandbox Code Playgroud)

web.config中:

<?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="WSGI_ALT_VIRTUALENV_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
    <add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS" value="D:\home\site\wwwroot\env\Scripts\activate_this.py" />
    <add key="WSGI_HANDLER" value="ptvs_virtualenv_proxy.get_virtualenv_handler()" />
    <add key="PYTHONPATH" value="D:\home\site\wwwroot" />
    <add key="DJANGO_SETTINGS_MODULE" value="myapp.settings" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <!-- Required for websockets. -->
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <remove name="Python273_via_FastCGI" />
      <add name="Python FastCGI" path="handler.fcgi" verb="*" modules="FastCgiModule" scriptProcessor="D:\Python27\python.exe|D:\Python27\Scripts\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
    <rewrite>
      <rules> …
Run Code Online (Sandbox Code Playgroud)

python sqlite django azure azure-web-app-service

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