我正在尝试使用Python分析器来加速我的代码.我已经能够确定几乎所有时间花在的特定功能,但我无法弄清楚该功能在何时花费的时间.
下面我有个人资料输出,它显示"appendBallot"是罪魁祸首,消耗将近116秒.下面,我有"appendBallot"的代码.
我无法从配置文件输出中找出,我需要优化"appendBallot"的哪一部分,因为下一个最高时间条目不到一秒.我相信很多人只能从我的代码中告诉我,但我想了解如何从配置文件输出中获取该信息.任何帮助将不胜感激.
档案输出:
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 116.168 116.168 <string>:1(<module>)
1 0.001 0.001 116.168 116.168 {execfile}
1 0.003 0.003 116.167 116.167 foo.py:1(<module>)
1 0.000 0.000 116.139 116.139 ballots.py:330(loadKnown)
1 0.000 0.000 116.109 116.109 plugins.py:148(load)
1 0.196 0.196 116.108 116.108 BltBallotLoader.py:37(loadFile)
100000 114.937 0.001 115.912 0.001 ballots.py:133(appendBallot)
100000 0.480 0.000 0.790 0.000 ballots.py:117(newBallot)
316668 0.227 0.000 0.310 0.000 ballots.py:107(getNumCandidates)
417310/417273 0.111 0.000 0.111 0.000 {len}
200510 0.071 0.000 0.071 0.000 {method 'append' of 'list' objects} …Run Code Online (Sandbox Code Playgroud) 我有一个wxPython应用程序,在这个应用程序中,我可以从各种框架中选择和复制文本,但我不能从对话框中这样做.有没有办法做到这一点?
我理解我可以通过在对话框中放置某种TextCtrl来实现这一点,但我希望能够从标准的对话框中做到这一点.
编辑:
对不起,我应该更具体一点.我无法从Windows Vista或Mac下的wx.MessageBox中选择文本(无法访问Linux来尝试).以下是创建消息框的一个示例:
wx.MessageBox(str(msg), "Could not load ballots", wx.OK|wx.ICON_ERROR)
Run Code Online (Sandbox Code Playgroud)
我无法选择消息框的文本.
我经常使用lambda表达式在Python中进行排序,虽然它工作正常,但我觉得它不是很易读,并希望有更好的方法.这是我的典型用例.
我有一个数字列表,例如, x = [12, 101, 4, 56, ...]
我有一个单独的索引列表: y = range(len(x))
我想y根据值中的值排序x,我这样做:
y.sort(key=lambda a: x[a])
Run Code Online (Sandbox Code Playgroud)
有没有使用lambda这样做的好方法?
对于我自己的Gmail帐户,我有多个与之关联的电子邮件地址.例如,我的大学有一个与我的Gmail相关联的电子邮件地址,我可以从我的Gmail发送电子邮件,就像它们来自我的大学电子邮件地址一样.
我正在阅读Google API,我发现我可以获得用户的Gmail地址,但是我是否还可以获得与其Gmail帐户相关联的任何其他电子邮件地址?
当用户登录我的网站时,我想向他们提供与gmail相关的电子邮件地址列表,让他们选择他们想要使用的电子邮件地址.
编辑:谢谢大家的答案,但我不认为他们中的任何一个回答了这个问题.我一直在玩Google的OAuth游乐场.奇怪的是,我可以获得大量非常个人化的信息(用户联系人列表,甚至收到的电子邮件)但我无法获得用户的替代电子邮件地址.
另一个问题提供了一个很好的,简单的解决方案,用于实现对象相等的测试.我将重复上下文的答案:
class CommonEqualityMixin(object):
def __eq__(self, other):
return (isinstance(other, self.__class__)
and self.__dict__ == other.__dict__)
def __ne__(self, other):
return not self.__eq__(other)
class Foo(CommonEqualityMixin):
def __init__(self, item):
self.item = item
Run Code Online (Sandbox Code Playgroud)
我想为一个使用的类做这个__slots__.我知道基类和子类都必须使用插槽,但是你如何定义__eq__插槽呢?
我有一个域名注册domains.google.com,我使用G Suite帐户,也发送电子邮件来自SES和mailchimp.
我的DNS记录对我来说是正确的(Mailchimp说明):
@ TXT"v = spf1 include:_spf.google.com include:amazonses.com include:servers.mcsv.net~all"
_dmarc TXT"v = DMARC1; p = none; pct = 100; rua = mailto:re+aml1ryadtn7@dmarc.postmarkapp.com; sp = none; aspf = r;"
我使用邮戳的漂亮服务来获取每周DMARC摘要,并且他们为mailchimp电子邮件报告此错误:
mcsv.net有权代表mydomain.com发送,但看起来SPF仍未通过DMARC的对齐测试.DMARC查看邮件的返回路径,以确保其中的域与"发件人"地址中的域匹配.如果Return-Path路径与From地址不匹配,那么这些消息将无法通过DMARC的SPF对齐测试.请检查此来源,因为您可能需要设置自定义的返回路径.
以下是来自mailchimp电子邮件的相关标题:
Return-Path: <bounce-mc.us17_88978185.265251-recipient=patentbots.com@mail125.suw11.mcdlv.net>
From: me@mydomain.com
Run Code Online (Sandbox Code Playgroud)
设置(DNS或Mailchimp)中是否存在导致SPF DMARC对齐失败的错误?或者这是Mailchimp不支持的东西?
我最近将我的GAE Python应用程序升级到Python 2.7.从那时起,我定期与开发服务器发生以下错误,并且开发服务器提供空白页面:
Traceback (most recent call last):
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 168, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 206, in _LoadHandler
handler = __import__(path[0])
[...]
File "/Users/joneill/OpenSTV/OpenSTV/trunk/OpaVote-HR/main.py", line 2, in <module>
import views
[...]
File "/Users/joneill/OpenSTV/OpenSTV/trunk/OpaVote-HR/views.py", line 3, in <module>
from pytz.gae import pytz
[...]
File "/Users/joneill/OpenSTV/OpenSTV/trunk/OpaVote-HR/pytz/__init__.py", line 34, in <module>
from pkg_resources import resource_stream
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 662, in Decorate
return func(self, *args, **kwargs)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1818, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line …Run Code Online (Sandbox Code Playgroud) 我正在使用blobstore和我的Google App Engine应用程序,一切都在生产服务器和开发服务器上运行良好.然而,使用testbed和webtest进行测试是行不通的......
在我的测试中,blob存在,因为我可以像这样访问它:
blob = self.blobstore_stub.storage._blobs[key]
Run Code Online (Sandbox Code Playgroud)
当我尝试在我的测试中下载blob时
response = self.app.get("/blob-download/2")
Run Code Online (Sandbox Code Playgroud)
我的blobstore下载处理程序永远不会被调用,我得到404错误(但链接在dev或prod服务器上工作).
我怀疑这是testbed或webtest的错误...
关于我可能做错什么的任何想法,或者如果这是一个错误的testbed/webtest可能是一个好的工作,以便我可以测试我的代码的这部分?
以下是有关我如何设置测试的一些信息.
import unittest
from webtest import TestApp
from google.appengine.ext import db, testbed
from google.appengine.api import users
from google.appengine.api import apiproxy_stub_map
class ExampleTests(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.setup_env(app_id="stv")
self.testbed.activate()
self.testbed.init_datastore_v3_stub()
self.testbed.init_taskqueue_stub()
self.testbed.init_mail_stub()
self.testbed.init_blobstore_stub()
self.app = TestApp(main.application)
apiproxy_stub_map.apiproxy.GetStub("datastore_v3").Clear()
self.taskqueue_stub = apiproxy_stub_map.apiproxy.GetStub('taskqueue')
self.mail_stub = apiproxy_stub_map.apiproxy.GetStub('mail')
self.blobstore_stub = apiproxy_stub_map.apiproxy.GetStub('blobstore')
def testBlob(self):
# create blob using files.blobstore.create
response = self.app.get("/blob-download/2") # This returns 404
self.assertEqual(response.body, "content of blob") …Run Code Online (Sandbox Code Playgroud) 我想在我的应用程序中记录用户活动,以便向用户演示,也可以用于管理目的.我的客户是公司,所以我可能会在三个级别上展示活动:
要进行日志记录,我将创建一个模型来存储日志条目.我看到了一些这样做的方法.
首先,我可以将每个记录的活动存储在自己的实体中,然后根据需要进行查询:
class Activity(ndb.Model):
activity = ndb.StringProperty()
user_id = ndb.StringProperty()
company_id = ndb.StringProperty()
Run Code Online (Sandbox Code Playgroud)
其次,我可以将用户的所有活动存储在单个实体中:
class UserActivity(ndb.Model):
activity = ndb.StringProperty(repeated=True) # Note this is now a list
company_id = ndb.StringProperty()
Run Code Online (Sandbox Code Playgroud)
第三,我可以将公司的所有活动存储在一个实体中:
class CompanyActivity(ndb.Model):
activity = ndb.StringProperty(repeated=True) # Would store user_id here somehow
Run Code Online (Sandbox Code Playgroud)
这三个选项中的功能/性能权衡是什么?我知道如果频繁出现交易,第二和第三选项存在潜在的争用问题,但我们假设这不是一个问题,为了讨论.
对于第二个和第三个选项,减少数据存储区实体的总数是否有任何显着优势(因为它们将合并为更少的实体)?或者我应该选择第一个选项?
我使用 Google Identity Platform 和 FirebaseUI-Web 登录我的网站。我有密码登录、Oauth2 Google、OAuth2 Microsoft 和 SSO 选项。
对于除 SSO 之外的所有功能,Identity Platform 都会返回 a,displayName因此我有登录用户的名称。对于 SSO,我没有,而且我也想在那里获取它。
我的客户在其端使用 Azure AD 进行 SSO。他们添加了displayName这样的声明:
但我仍然没有站在displayName我这边。
在使用 FirebaseUI-Web 进行 SSO 登录过程结束时,我收到用户的 ID 令牌。我使用它从 Identity Platform 检索用户,这是我收到的信息:
{
'localId': 'xxx',
'email': 'user@example.com',
'emailVerified': True,
'providerUserInfo': [{
'providerId': 'saml.xxx',
'federatedId': 'user@example.com',
'email': 'user@example.com',
'rawId': 'user@example.com'}],
'validSince': '1639441441',
'lastLoginAt': '1639441441196',
'createdAt': '1639441441196',
'lastRefreshAt': '2021-12-14T00:24:01.196Z'
}
Run Code Online (Sandbox Code Playgroud)
我们如何配置 Azure 以通过 SSO/SAML 登录向 Google Identity Platform 提供用户名?
saml azure single-sign-on azure-active-directory google-cloud-platform