我想在scrapy框架中跟踪功能/类执行命令。默认项目中有多个* .py文件,我想知道哪个py文件和类已按顺序执行。将记录器排在每个类和每个函数中听起来很愚蠢。如何可视化此顺序?
cprofile主要用于测量总时间。我还可以可视化一个模块内部的执行顺序,这是常见的问题,但是很难可视化多个模块。
在跟踪包方面,我没有找到适合大型项目(例如scrapy或django)的示例。跟踪用法教程仅涉及一个python文件。
我想在一个大型项目(例如scrapy)中的多个模块中跟踪多个* .py文件,而不是一个模块。
我知道像pdb这样的调试工具,但是我发现在整个项目中放置断点很麻烦。更重要的是,总结执行顺序并不容易。
最后,我通过使用Hunter进行了解决,它比内置跟踪模块更好。跟踪模块不提供include_dir属性。
对于那些对如何追踪所有刮板线条充满好奇的人。
$PYTHONHUNTER='Q(module_startswith=["scrapy", "your_project"])' scrapy list
Run Code Online (Sandbox Code Playgroud)
对于django,跟踪rest_framework的执行代码并将其保存到test.log,例如:
$PYTHONHUNTER='Q(module_startswith=["rest_framework", "your_project"]), action=CallPrinter(stream=open("test.log", "w"))' python manage.py runserver --noreload --nothreading
Run Code Online (Sandbox Code Playgroud) 认为
我正在使用 Django 2.x 并使用默认设置。即,TIME_ZONE = 'UTC'和USE_TZ = True
我正在夏威夷檀香山记录数据,这意味着檀香山的 2019-4-9 晚上 9 点(用户时间)是 UTC(服务器时间)的 2019-4-10
现在我想按 2019-4-9 Honolulu 时间(用户时间)过滤
这是一个演示代码
class TimelineTable(models.Model):
accessed = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'{self.accessed}'
Run Code Online (Sandbox Code Playgroud)
这是TimelineTable中的数据(记录于2019-4-9檀香山时间)
ID accessed
1 2019-04-10 07:19:30.319881
2 2019-04-10 07:19:35.004506
3 2019-04-10 07:19:37.612088
Run Code Online (Sandbox Code Playgroud)
不考虑时区,获取数据工作正常
ID accessed
1 2019-04-10 07:19:30.319881
2 2019-04-10 07:19:35.004506
3 2019-04-10 07:19:37.612088
Run Code Online (Sandbox Code Playgroud)
>>> TimelineTable.objects.filter(accessed__date=datetime.date(2019, 4, 9))
<QuerySet []>
>>> TimelineTable.objects.filter(accessed__date=datetime.date(2019, 4, 10))
<QuerySet [<TimelineTable: 2019-04-10 07:19:30.319881+00:00>, <TimelineTable: 2019-04-10 07:19:35.004506+00:00>, …Run Code Online (Sandbox Code Playgroud) 下面的代码是一个流行的Solidity以太坊函数
function: swapExactETHForTokens(uint256 amountOutMin, address[] path, address to, uint256 deadline)
Run Code Online (Sandbox Code Playgroud)
Go 中的类型应该amountOutMin是什么样的?
这是我在 Go 中尝试过的:
function: swapExactETHForTokens(uint256 amountOutMin, address[] path, address to, uint256 deadline)
Run Code Online (Sandbox Code Playgroud)
错误信息:
不能使用 int 作为 ptr 类型作为参数
显示amountOutMin是一个指针,而solidity的声明是uint256。很混乱
编辑:
最小可重复示例
amountOutMin := 20
data, err := routerABI.Pack("swapExactETHForTokens", amountOutMin, path, to, deadline)
Run Code Online (Sandbox Code Playgroud)
运行上面的代码
package main
import (
"fmt"
"log"
"strings"
"time"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
)
const (
WETH = "0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6"
tokenWanted = "0x2aC3c1d3e24b45c6C310534Bc2Dd84B5ed576335"
)
func main() {
now := time.Now()
deadline := now.Add(10*time.Minute).Unix()
tokenWantedAddress …Run Code Online (Sandbox Code Playgroud) #include <stdio.h>
int main() {
struct my_structure {
char name[20];
int number;
int rank;
};
struct my_structure var = {"Stud", 35, 1};
struct my_structure *ptr;
ptr = &var;
printf("%p ", &var);
printf("\n");
printf("%p ", &ptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码在c99下编译.ptr不等于var.为什么?
0x7ffeea577988
0x7ffeea577978