GVKun编程网logo

Python中的“线程本地存储”是什么,为什么需要它?(线程本地存储的作用)

24

如果您想了解Python中的“线程本地存储”是什么,为什么需要它?和线程本地存储的作用的知识,那么本篇文章将是您的不二之选。我们将深入剖析Python中的“线程本地存储”是什么,为什么需要它?的各个方

如果您想了解Python中的“线程本地存储”是什么,为什么需要它?线程本地存储的作用的知识,那么本篇文章将是您的不二之选。我们将深入剖析Python中的“线程本地存储”是什么,为什么需要它?的各个方面,并为您解答线程本地存储的作用的疑在这篇文章中,我们将为您介绍Python中的“线程本地存储”是什么,为什么需要它?的相关知识,同时也会详细的解释线程本地存储的作用的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

Python中的“线程本地存储”是什么,为什么需要它?(线程本地存储的作用)

Python中的“线程本地存储”是什么,为什么需要它?(线程本地存储的作用)

特别是在Python中,如何在线程之间共享变量?

尽管我threading.Thread以前从未使用过,但从未真正理解或看到过如何共享变量的示例。它们是在主线程和子线程之间共享还是仅在子线程之间共享?我何时需要使用线程本地存储来避免这种共享?

我已经看到许多有关通过使用锁在线程之间同步对共享数据的访问的警告,但是我还没有看到这个问题的一个很好的例子。

提前致谢!

答案1

小编典典

在Python中,所有内容都是共享的,但函数局部变量除外(因为每个函数调用都有自己的局部变量集,而线程始终是单独的函数调用。)即使如此,也只有变量本身(引用对象的名称)对于该功能而言是本地的;对象本身始终是全局的,任何事物都可以引用它们。Thread在这方面,特定线程的对象不是特殊对象。如果将Thread对象存储在所有线程都可以访问的位置(例如全局变量),则所有线程都可以访问该Thread对象。如果要原子地修改另一个线程可以访问的
任何内容 ,则必须使用锁来保护它。当然,所有线程都必须共享此相同的锁,否则效果不佳。

如果您需要实际的线程本地存储,那就是其中的地方threading.localthreading.local线程之间不共享属性。每个线程仅看到其自身放置在其中的属性。如果您对它的实现感到好奇,请在标准库的_threading_local.py中找到源。

Java Maven快照是什么,为什么我们需要它?

Java Maven快照是什么,为什么我们需要它?

如何解决Java Maven快照是什么,为什么我们需要它??

Maven中的快照版本尚未发布。

这个想法是,前一个1.0版本(或任何其他版本)完成后,存在一个1.0-SNAPSHOT。那个版本可能会变成 1.0。它基本上是“ 1.0开发中”。这可能接近实际1.0发行版,或相当遥远(0.9例如,发行后立即发行)。

“真实”版本和快照版本之间的区别在于快照可能会得到更新。这意味着1.0-SNAPSHOT今天下载的文件可能不同于昨天或明天下载的文件。

通常,快照依赖关系仅应在开发期间存在,并且任何发行版本(即,非非快照)都不应依赖快照版本。

当你构建应用程序时,Maven将在本地存储库中搜索依赖项。如果在那里找不到稳定的版本,它将搜索远程存储库(在settings.xml或中定义pom.xml)以检索此依赖项。然后,它将把它复制到本地存储库中,以供以后的版本使用。

例如,一个foo-1.0.jar库被认为是稳定版本,如果Maven在本地存储库中找到它,它将在当前版本中使用该库。

现在,如果你需要一个foo-1.0-SNAPSHOT.jar库,Maven将知道此版本不稳定,并且可能会发生更改。这就是为什么即使在本地存储库中找到该库的版本,Maven也会尝试在远程存储库中查找较新版本的原因。但是,每天只进行一次此检查。这意味着,如果你foo-1.0-20110506.110000-1.jar的本地存储库中有一个库(即,该库已于2011/05/06在11:00:00生成),并且如果你在同一天再次运行Maven构建,则Maven将不会检查存储库以获得较新的版本。

Maven为你提供了一种在存储库定义中更改此更新策略的方法:

<repository>
    <id>foo-repository</id>
    <url>...</url>
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>XXX</updatePolicy>
    </snapshots>
</repository>

XXX可以在哪里:

  • :Maven将在每个版本中检查更新的版本;
  • ,默认值;
  • :XXX:以分钟为单位的间隔(XXX)
  • :Maven将永远不会尝试检索另一个版本。仅当它在本地不存在时,它才会这样做。通过配置,SNAPSHOT版本将作为稳定库处理。

解决方法

我对Maven快照的含义以及为什么要构建一个快照感到困惑。

Maven快照到底是什么,为什么我们需要它?

Maven快照到底是什么,为什么我们需要它?

我对Maven快照的含义有点困惑,为什么我们要构建一个快照?


#1楼

这就是存储库快照的外观,并且在这种情况下未启用快照,这意味着此处引用的存储库是稳定的,不需要更新。

<project>
    ...
    <repositories>
        <repository>
            <id>lds-main</id>
            <name>LDS Main Repo</name>
            <url>http://code.lds.org/nexus/content/groups/main-repo</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>

另一种情况是:

<snapshots>
        <enabled>true</enabled>
</snapshots>

这意味着Maven将寻找该存储库的更新。 您还可以使用标签指定更新间隔。


#2楼

通常在Maven中,我们有两种类型的内部版本1)快照内部版本2)发布内部版本

  1. 快照版本:SNAPSHOT是特殊版本,用于指示当前的部署副本与常规版本不同,maven会检查远程存储库中每个版本的版本,因此快照版本不过是开发版本。

  2. 发布版本:发行意味着删除该版本的SNAPSHOT,这是常规的版本。


#3楼

Maven版本可以包含字符串文字“ SNAPSHOT”,以表示当前正在积极开发项目。

例如,如果您的项目的版本为“ 1.0-SNAPSHOT”,并且将该项目的工件部署到Maven存储库,那么如果要在11处部署发行版,则Maven会将该版本扩展为“ 1.0-20080207-230803-1” UTC时间:2008年2月7日晚上8点。 换句话说,部署快照时,并不是要发布软件组件;而是要发布软件组件。 您将在特定时间发布组件的快照。

因此,快照版本主要用于活动开发中的项目。 如果您的项目依赖于正在开发中的软件组件,则可以依赖快照发行版,并且在运行构建时,Maven会定期尝试从存储库下载最新的快照。 同样,如果系统的下一发行版将具有“ 1.8”版本,则在正式发行之前,您的项目将具有“ 1.8-SNAPSHOT”版本。

例如,以下依赖项将始终下载spring的最新1.8开发JAR:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring</artifactId>
        <version>1.8-SNAPSHOT”</version>
    </dependency>

马文

Maven发布过程的一个例子

在此处输入图片说明


#4楼

我想谈一谈术语。 其他答案很好地解释了Maven上下文中的“快照”版本。 但是,是否应该将非快照版本称为“发行”版本呢?

有一个“放”版本的语义版本的想法,这似乎是没有限定词,如任何版本之间的一些紧张-SNAPSHOT也没有一个限定词,如-beta.4 ; 和Maven的“发行”版本的想法,其中似乎仅包括-SNAPSHOT的缺失。

换句话说,“发布”是指“我们可以将其发布到Maven Central”还是“该软件已最终发布给公众”,这在语义上是模棱两可的。 如果将-beta.4公开发布,我们可以认为-beta.4是“发布”版本,但它不是“最终发布”。 语义版本控制清楚地表明, -beta.4类的-beta.4是“预发行”版本,因此即使没有-SNAPSHOT ,将其称为“发行”版本也没有-SNAPSHOT 。 实际上,根据定义,即使-rc.5也是一个发行候选版本,而不是实际发行版,即使我们可以允许公众访问进行测试。

因此,尽管如此,我认为Maven似乎更合适的是只调用一个根本没有任何限定符的“发布”版本,甚至没有-beta.4 。 对于Maven非快照版本,更好的名字可能是“稳定”版本(受另一个答案的启发)。 因此,我们将有:

  • 1.2.3-beta.4-SNAPSHOT :预发行版本的快照版本。
  • 1.2.3-SNAPSHOT :发行版的快照版本。
  • 1.2.3-beta.4 :预发行版本的稳定版本。
  • 1.2.3 :发行版(显然是稳定的非快照版本)。

#5楼

了解SDLC的上下文将有助于了解快照和发行版之间的区别。 在开发过程中,开发人员都将其功能贡献给基准分支。 在某个时候,线索认为已经积累了足够的功能,那么他将从基准分支中删除发布分支。 在此时间点之前的所有构建都是快照。 到此为止的构建都是发行版。 需要注意的是,如果在发布测试期间发现任何缺陷,则发布版本在投入生产之前也可能会发生变化。

Owlto 积分计划是什么,我们为什么需要它?

Owlto 积分计划是什么,我们为什么需要它?

作为一个专注于用户体验的互操作性协议, owlto 在短短一年内迅速吸引了来自 200 多个国家和地区的160万+用户。该平台正在以令人印象深刻的速度扩张,交易量、用户基数、合作伙伴生态系统和网络整合都有显著增长。

这一显著成就离不开 Owlto 用户的坚定信任和支持。正是您的积极参与和宝贵反馈使我们能够不断改进和增强 Owlto 社区。因此,我们认为那些为 Owlto 发展做出贡献的人应该得到认可,以及 Owlto 即将到来的空投。

在实现去中心化之旅的核心使命中, Owlto 致力于赋予每个 Owlto 用户积极参与并塑造平台未来治理的能力。随着 Owlto 生态系统的成熟,我们认为现在是回馈新用户并推出升级版 Owlto 积分计划的最佳时机。

作为一个刚刚获得 800 万美元战略投资的项目, Owlto 预计将在2024年第三季度创建第一个快照。升级版的 Owlto 积分计划是 Owlto 将更多权力转移给社区的主要机制。这些积分将作为 Owlto 用户贡献价值的证明,部分代币将作为空投分发给合格的积分持有者。

Owlto 积分计划更新概况

Owlto 积分计划是一个针对忠诚和有贡献的参与者的主要激励计划,包括但不限于 Owlto 社区中的合作伙伴、推广者和用户。无论您是忠实的跨链桥用户、热情的推广者分享 Owlto 愿景,还是我们任务中的积极参与者——您的忠诚和努力都将得到应有的回报。

从 2024 年6月1日起, Owlto 积分计划经历了全面升级。不仅网络跨链桥的基础积分增加了,而且该系统还与任务更紧密地整合,扩大了赚取积分的渠道。

这次最新的改革使积分系统更加公平和用户友好。新参与者现在有充分的机会快速积累积分。同时,我们为 Owlto 的活跃长期用户提供了慷慨的激励,以继续他们与 Owlto 的深度参与。 Owlto 推出才一年,现在正是与 Owlto 一起探索不断发展的 web3 世界的最佳时机!

无论您是经验丰富的老手还是刚开始与 Owlto 的旅程,更新的 Owlto 积分系统为您提供了探索不断发展的 web3 世界的有力理由。现在出发,为时不晚!

如何获得 Owlto 积分?

我看到你脑海中的齿轮在转动,想知道如何积累这些积分。别担心,我来帮你——有四种方式可以赚取 Owlto 奖励积分:

1.跨链桥

无论您转移多少资产,完成 Owlto 上的跨链桥交易的用户都有资格获得相应的奖励积分,基于基本积分奖励标准。不仅如此,您赚取的积分将根据您在 Owlto 上完成的总桥接交易数量成倍增加。

总结来说,用户将因其在 Owlto 上的桥接获得基础桥接积分,积分价值将与他们的总交易量成比例增加。

基础跨链桥奖励:

Owlto 积分计划是什么,我们为什么需要它?

需要注意的是——基础桥接奖励也是这次升级的重要组成部分。在 2023 年12月6日至2024年5月31日期间,无论网络或代币,每次桥接交易赚取的基本积分为100。

加倍乘数

您完成的交易越多,应用于您积分收益的乘数就越高。例如,完成 10 次桥接交易后,乘数增加到1.2倍;完成50次交易后,增加到1.5倍;完成 10 0次交易后,达到2倍。乘数的详细信息如下:

第二阶段(从 2023 年12月6日起)

Owlto 积分计划是什么,我们为什么需要它?

第一阶段(2023年 6 月2 6 日至2023年12月 6 日)

Owlto 积分计划是什么,我们为什么需要它?

2.任务

我们鼓励用户探索 Owlto 激动人心的任务,特别是前端(官方网站)呈现的任务。在任务期间,您不仅会收到桥接积分,还有机会获得额外的任务积分。您完成的任务越多,等待您的奖励就越丰厚。

任务积分累积示例:

用户从 zkSync Era 桥接到以太坊。

a .任务奖励为 500 积分,用于从任何网络桥接到以太坊。

b .用户在 Owlto 上完成了超过 100 次桥接。

  • 桥接积分:300
  • 奖励乘数:1.5
  • 任务奖励积分:500

因此,用户通过 Owlto 赚取的总积分将是“300*1.5 + 500 = 950”。

看看你在一个任务中能赚多少积分!每个任务的详细规划和时间安排可以在我们前端页面上找到:https://owlto.finance/

为什么不现在就试试?

3.推荐

连接钱包到 Owlto Finance 后,将生成一个特定的推荐链接。一个之前没有在 Owlto Finance 上进行过跨链桥交易的新用户,通过您的推荐链接进入 Owlto Finance 并完成他的第一次桥接交易后,将被绑定为您的推荐人。一旦您的推荐人在 Owlto Finance 上累积积分,您将获得当前第二阶段推荐计划中由您的推荐人产生的积分的10%。在第一阶段,这个比例是30%。

举例:

一个新用户通过推荐人的链接在 Owlto Finance 上通过桥接交易生成了 1000 积分并与推荐人绑定。

因此,推荐人将获得的 Owlto 积分是:

1000*10% = 100

要生成您的推荐链接,请访问:https://owlto.finance/rewards

请注意,通过推荐计划,您不仅可以赚取 Owlto 积分,还可以与 Owlto Finance 共享您的推荐人产生的实际收入。推荐佣金的回扣率从1-1.5倍不等,这取决于您的推荐人进行的交易数量。

所以分享那个链接,带来新伙伴,看着你们俩的奖励一起增长!

4.签到

如果用户在同一天进行跨链桥交易,签到将赚取 5 倍的积分,总计10积分。

我们非常重视我们社区的反馈,本着公平、正义和生态系统平衡的理念,我们将从 2024 年6月1日起实施这一调整。您的宝贵意见对我们至关重要,我们将继续根据您的反馈改进我们的产品。

更多常见问题解答

Q1 : 我如何查看我当前的积分余额?

A1 : 在前端连接您的钱包后,您可以在导航栏中看到您的总积分和获取历史。

要查看您的 Owlto 积分,请访问: https :// owlto . finance / rewards

Q2 : 积分需要多长时间才能入账?

A2 : 通常,在您的交易执行后的几分钟内,积分将被添加到您的地址。

Q3 : 如果我注意到我的积分有任何异常,我应该怎么做?

A3 : 如果您注意到您的积分有任何异常,请随时通过 Discord ( https :// discord . gg / owlto )联系我们,我们将及时解决您的问题。

关于 Owlto Finance

Owlto Finance 提供无缝的跨链桥接服务,使用户能够轻松地在各种区块链之间转移资产。它是一个以意图为中心的互操作性协议,“用 AI 代理连接世界”。 Owlto 的桥接产品已经成为 2023 年增长最快的桥梁之一,在200多个国家和地区拥有160万+用户。此外,它还被评为 BTC 生态系统中排名第一的全链互操作性协议,拥有超过150万笔交易。由于其“安全、快速、低价和易用”的特点,它已被超过92个知名合作伙伴如 Arbitrum 、 Linea 、 Base 、 BEVM 、 BSquared 、 Binance Web3 钱包、 Trust 钱包、 OKX Web3 钱包、 zkSync Era 、 Scroll 、 Starknet 、 Kroma 、 imToken 、 Bitget 钱包、 Chainlink 、 iZUMi 等高度推荐。

以上就是Owlto 积分计划是什么,我们为什么需要它?的详细内容,更多请关注php中文网其它相关文章!

Python中的lambda函数是什么,为什么我们需要它?

Python中的lambda函数是什么,为什么我们需要它?

python中的lambda函数是什么,为什么我们需要它?

在本文中,我们将学习 Python 中的 lambda 函数以及为什么需要它,并查看 lambda 函数的一些实际示例。

Python 中的 lambda 函数是什么?

Lambda 函数通常称为“匿名函数”, 与普通 Python 函数相同,只不过它可以不带名称进行定义。 >def关键字用于定义普通函数,而lambda关键字用于定义匿名函数。然而,它们仅限于单行表达。它们与常规函数一样,可以接受多个参数。

语法

lambda arguments: expression
登录后复制
  • 此函数接受任意数量的输入,但仅计算并返回一个表达式。

  • Lambda 函数可以用在任何需要函数对象的地方。

    立即学习“Python免费学习笔记(深入)”;

  • 您必须记住,lambda 函数在语法上仅限于单个表达式。

  • 除了函数中的其他类型的表达式之外,它在特定的编程领域还有多种用途。

为什么我们需要 Lambda 函数?

  • 与使用 def 关键字编写的普通 Python 函数相比,lambda 函数需要更少的代码行。然而,这并不完全正确,因为使用 def 定义的函数可以在一行中定义。但是,def 函数通常定义在不止一行上。

  • 它们通常在需要较短时间(临时)的函数时使用,通常在另一个函数(例如过滤器、映射或归约)中使用。

  • 您可以定义一个函数并在定义结束时使用 lambda 函数立即调用它。这对于 def 函数来说是不可能的。

Python Lambda 函数的简单示例

示例

# input string 
inputString = ''TUTORIALSpoint''
 
# converting the given input string to lowercase and reversing it
# with the lambda function
reverse_lower = lambda inputString: inputString.lower()[::-1]

print(reverse_lower(inputString))
登录后复制

输出

执行时,上述程序将生成以下输出 -

tniopslairotut
登录后复制

在条件检查中使用 Lambda 函数

示例

# Formatting number to 2 decimal places using lambda function
formatNum = lambda n: f"{n:e}" if isinstance(n, int) else f"{n:,.2f}"
 
print("Int formatting:", formatNum(1000))
print("float formatting:", formatNum(5555.4895412))
登录后复制

输出

执行时,上述程序将生成以下输出 -

Int formatting: 1.000000e+03
float formatting: 5,555.49
登录后复制

Lambda 函数和 def 定义函数有什么区别?

示例

# creating a function that returns the square root of 
# the number passed to it
def square(x):
	return x*x


# using lambda function that returns the square root of 
# the number passed 
lambda_square = lambda x: x*x


# printing the square root of the number by passing the
# random number to the above-defined square function with the def keyword
print("Square of the number using the function with ''def'' keyword:", square(4))

# printing the square root of the number by passing the
# random number to the above lambda_square function with lambda keyword
print("Square of the number using the function with ''lambda'' keyword:", lambda_square(4))
登录后复制

输出

执行时,上述程序将生成以下输出 -

Square of the number using the function with ''def'' keyword: 16
Square of the number using the function with ''lambda'' keyword: 16
登录后复制

如前面的示例所示,square()lambda_square () 函数的工作方式相同且符合预期。让我们仔细看看这个例子,找出它们之间的区别 -

使用 lambda 函数 不使用 lambda 函数
支持返回某个值的单行语句。 允许功能块内有任意数量的行。
非常适合进行小型操作或数据操作。 这在需要多行代码的情况下非常有用。
降低代码可读性 我们可以通过使用注释和功能解释来提高可读性。

Python lambda 函数实际用途

示例

将 Lambda 函数与列表理解结合使用

is_odd_list = [lambda arg=y: arg * 5 for y in range(1, 10)]
 
# looping on each lambda function and calling the function
# for getting the multiplied value
for i in is_odd_list:
	print(i())
登录后复制

输出

执行时,上述程序将生成以下输出 -

5
10
15
20
25
30
35
40
45
登录后复制

在列表推导式的每次迭代中,都会创建一个具有默认参数 y 的新 lambda 函数(其中 y 是迭代中的当前项)。随后,在 for 循环中,我们使用 i() 使用默认参数调用相同的函数对象并获取所需的值。因此,is_odd_list 保存 lambda 函数对象列表。

示例

将 Lambda 函数与 if-else 条件语句结合使用

# using lambda function to find the maximum number among both the numbers
find_maximum = lambda x, y : x if(x > y) else y
 
print(find_maximum(6, 3))
登录后复制

输出

执行时,上述程序将生成以下输出 -

6
登录后复制

示例

将 Lambda 函数与多个语句结合使用

inputList = [[5,2,8],[2, 9, 12],[10, 4, 2, 7]]

# sorting the given each sublist using lambda function
sorted_list = lambda k: (sorted(e) for e in k)

# getting the second-largest element 
second_largest = lambda k, p : [x[len(x)-2] for x in p(k)]
output = second_largest(inputList, sorted_list)

# printing the second largest element
print(output)
登录后复制

输出

执行时,上述程序将生成以下输出 -

[5, 9, 7]
登录后复制

带有filter()的Python lambda函数

示例

inputList = [3, 5, 10, 7, 24, 6, 1, 12, 8, 4]

# getting the even numbers from the input list 
# using lambda and filter functions
evenList = list(filter(lambda n: (n % 2 == 0), inputList))
# priting the even numbers from the input list
print("Even numbers from the input list:", evenList)
登录后复制

输出

执行时,上述程序将生成以下输出 -

Even numbers from the input list: [10, 24, 6, 12, 8, 4]
登录后复制

带有map()的Python lambda函数

Python 的 map() 函数接受一个函数和一个列表作为参数。使用 lambda 函数和列表调用该函数,它返回一个新列表,其中包含该函数为每个项目返回的所有 lambda 更改的项目。

示例

使用 lambda 和 map() 函数将所有列表元素转换为小写

# input list
inputList = [''HELLO'', ''TUTORIALSpoint'', ''PyTHoN'', ''codeS'']

# converting all the input list elements to lowercase using lower()
# with the lambda() and map() functions and returning the result list
lowercaseList = list(map(lambda animal: animal.lower(), inputList))

# printing the resultant list
print("Converting all the input list elements to lowercase:\n", lowercaseList)
登录后复制

输出

执行时,上述程序将生成以下输出 -

Converting all the input list elements to lowercase:
 [''hello'', ''tutorialspoint'', ''python'', ''codes'']
登录后复制

结论

在本教程中,我们通过大量示例深入学习了 Python 中的 lambda 函数。我们还了解了 lambda 函数和 def 函数之间的区别。

以上就是Python中的lambda函数是什么,为什么我们需要它?的详细内容,更多请关注php中文网其它相关文章!

今天关于Python中的“线程本地存储”是什么,为什么需要它?线程本地存储的作用的分享就到这里,希望大家有所收获,若想了解更多关于Java Maven快照是什么,为什么我们需要它?、Maven快照到底是什么,为什么我们需要它?、Owlto 积分计划是什么,我们为什么需要它?、Python中的lambda函数是什么,为什么我们需要它?等相关知识,可以在本站进行查询。

本文标签: